特2:全局 const 变量的作用域仍然是当前文件
文章目录
前言
提示:以下是本篇文章正文内容,下面案例可供参考
特1:C++中的 const 分为编译时常量与运行时常量
>.初始式是常量表达式的 const 对象称为 编译时常量 否则称为 运行时常量
>.编译时常量编译阶段就执行值替换了 值替换的过程类似宏展开
>.这和添加了关键字的效果类似
一、默认参数与无名形参 二、函数的重载 三、构造函数初始化列表 四、类的成员和const成员
成员函数
const 成员变量
const 成员函数
自身类型的静态成员
#include
using namespace std;
class B{
public:const static B static_self;double length {1.0};double width {1.0};double height {1.0};B(double a,double b,double c):length{a},height{c} { };B(double side):B(side,side,side) {}; //委托构造函数static void show(){};
};
const B B::static_self(2.2); //必须在类外定义 类内声明
int main() {cout<<B::static_self.height<<endl; //2.2
}
也可以将它定义成非const 类型的这样就可以修改了
五、const 对象 六、类的作用域 七、 关键字 类 八、封闭类和继承中各构造函数和析构函数执行先后 单继承情况下
>.派生类必须要在其构造函数初始化列表指明其成员对象和基类如何初始化(有默认构造能力的成员对象和基类构造函数可以不用指明) 多继承情况下 虚继承情况下 九、继承与派生
>.继承与派生是一个概念,只不过站的角度不同
虚继承:
向上转型(将派生类赋值给基类):
十、多态 () 虚析构函数: 虚函数表: 十二、抽像类与纯虚函数 抽像类: 十三、引用 十四、RTTI (Run-Time Type ) 十五、运算符重载( ) 十六、模板
类模板:
显示专门化( )
非类型参数:
模板特性 : \bf{\color{red}{模板特性:}} 模板特性:
显示实例化:(多文件编程)
>.显示实例化后 就可以把模板的声明和定义分开到不同的文件中了
类模板和模板类的概念
模板的继承与派生
模板参数的作用域:
#include
#include
using namespace std;
template <class T1, class T2>
class Pair
{
private:T1 key; //关键字T2 value; //值
public:Pair(T1 k, T2 v) : key(k), value(v) { };bool operator < (const Pair<T1, T2> & p) const;//如果用T1 T2 那将报错,declaration of template parameter 'T1' shadows template parametertemplate <class T3, class T4>//函数模板作友元friend ostream & operator << (ostream & o, const Pair<T3, T4> & p);
};
template <class T1, class T2>
bool Pair <T1, T2>::operator< (const Pair<T1, T2> & p) const
{ //“小”的意思就是关键字小return key < p.key;
}
template <class T1, class T2>//这就是模板的作用域
ostream & operator << (ostream & o, const Pair<T1, T2> & p)
{o << "(" << p.key << "," << p.value << ")";return o;
}
int main()
{Pair<string, int> student("Tom", 29);Pair<int, double> obj(12, 3.14);cout << student << " " << obj;return 0;
}
类模板与友元
#include
using namespace std;
template<class T>
class A
{
public:void Func(const T & p){cout << p.v;}
};
template <class T>
class B
{
private:T v;
public:B(T n) : v(n) { }template <class T2>friend class A; //把类模板A声明为友元
};
int main()
{B<int> b(5);A< B<int> > a; //用B替换A模板中的 T a.Func(b);return 0;
}
类模板中的静态成员
#include
using namespace std;
template <class T>
class A
{
private:static int count;
public:A() { count ++; }~A() { count -- ; };A(A &) { count ++ ; }static void PrintCount() { cout << count << endl; }
};
template<> int A<int>::count = 0;
template<> int A<double>::count = 0; //不同的模板类中的静态成员是不同的内存
int main()
{A<int> ia;A<double> da;
// A f; error: undefined reference to `A::count' ia.PrintCount();da.PrintCount();return 0;
}
十七、 如此,func() 函数就不能抛出任何类型的异常了,即使抛出了,try 也检测不到. 多态时派生类异常规范只能比基类限制更多(少一个参数),后来的 C++11 已经将它抛弃了,不再建议使用。 十八、copy构造函数 十九、四种类型转换关键字 二十、函数对象 二十一、 二十二、内联函数 二十三、函数的可变参数 To be … 总结
late than never