1.类里不能初始化静态成员变量,只能在类外
如class A{
static int a;
}
int A::a = 10;
常量变量只能在类的构造函数成员列表初始化,
如class A{
static int a;
public:
A():a(10){};
}
静态常量可以在声明时初始化
class A{
static const int a = 10;
}
经常使用枚举量作为类的常量
class A {
enum{one,two,three}
}
2.同一个类,当使用一个对象初始化另一个对象时,会使用复制构造函数
3.对于一个类,如果没有定义,编译器会自动生成下面的成员函数:
默认构造函数、默认析构函数、复制构造函数、赋值运算符、地址运算符
4复制构造函数
class_name(const Class_name &) 一般形式
何时调用:新建一个对象并将其初始化为同类现有对象时
比如常见的按值传递,返回对象会调用
5.试图释放内存两次或以上可能导致程序异常终止
6.默认复制构造函数是浅复制,比如一个指针,两个对象的指针会指向同一个地址
面对默认复制构造函数的缺陷,应当显式定义复制构造函数
7.重载赋值运算符
调用时机:将已有的对象赋给另一个对象时
一般形式:Class_name & Class_name::operator=(const Class_name &)
使用赋值运算符的注意点:
一、由于目标对象可有已分配数据,应当先使用delete[]来释放数据
二、应该避免赋值给自身
三、函数返回一个指向调用对象的引用,一般为 return *this;
8.在类中使用new要注意的地方:
在构造函数中使用new来初始化指针成员,应在析构函数中使用delete
new和delete应道匹配 new——delete; new []——delete[]
应定义一直复制构造函数,进行深复制
定义一个重载的赋值运算符,进行深复制
9.delete可以用于空指针
10.返回对象的说明
返回指向const对象的引用 :返回对象会调用复制构造函数,返回引用则效率更高
返回指向非const对象的引用:常用于重载赋值运算符以及重载与cout一起使用的<<运算符
返回对象:返回的对象时函数中的局部变量,则不能使用返回引用
返回const对象:能够使返回的值不能作为左值使用
11.对象是动态变量,则程序块结束时,将调用对象的析构函数
对象时静态变量,在程序结束时调用析构函数
对象时new创建,则当显式调用delete才会析构
12.定位new运算符P456-459
13.成员初始化列表的语法:
这种格式只能用于构造函数
必须用这种格式初始化非静态const数据成员
必须使用这种格式初始化引用数据成员
成员变量初始化顺序要和声明顺序一致
12.10编程练习 有时间再做