对于类类型的成员、常成员,必须使用初始化列表
具有命名空间作用域的变量也称为全局变量
函数原型作用域、块作用域、类作用域、命名空间作用域
基本类型 就是最简单的类型:如int 。char、double等。
构造类型 就是通过基本类型来创建的类型:数组、结构体、共用同、联合体、类等。
指针类型 最简单了,就是用 类型 加上*定义的变量。 空类型 即void类型。
构造函数的执行顺序:父类构造函数→对象成员→自己
虚函数:编译时不确定函数的地址,等到运行时才确定是哪个类的函数(只要把基类的成员函数声明为虚函数后,其派生类的同名成员函数自动变为虚函数)
重载后置++、--需加int
编译器为类默认生成的函数:无参构造函数、复制构造函数、析构函数、赋值运算符重载
new时的初始化:int * a = new int[3]{1,2,3}; 初始化列表
int fun()const{} const类型的函数只能放在类内(即非成员函数)静态成员也不能使用const
const int *p; int const *p;
//上面两个等价 指向常量的指针 int * const p; //常指针
const int * const p;//指向常量的常指针
没有返回值的三个函数:构造函数、析构函数、类型转换函数
非const对象也能调用const函数,但const对象只能调用const函数。
引用传递可以实现双向传递
内联函数声明时使用inline,函数体内不能有循环语句、switch语句
有默认参数的形参必须在形参列表的最后,因形实结合是从左向右 int f(int x,int y=2,int z=6); √ int f(int x=1,int y=5,int z); × int f(int x=1,int y,int z=6); ×
如果函数有原型声明且原型声明在定义前,则默认参数值必须在原型声明中给出,在之后定义时不能再指定默认值
调用时可以不需要参数的构造函数都是默认构造函数(全部参数都有默认形参值的构造函数也算)
可见性表示从内层作用域向外层作用域“看”时能看见什么
对象的生存期:从产生到结束的这段时间
常引用做形参,不会更改实参
直接以::开头表示顶层作用域(全局变量)
全局对象的构造函数再main之前调用,析构函数在main之后调用,函数内static对象析构函数在main之后调用,但全局对象在函数内static对象之前构造,故析构在最后。