静态变量的使用
- 类中的静态变量不属于任何对象,是共享变量
- 在类的方法实现的文件中初期化类的静态变量。
- 不能在类声明中初期化静态成员变量。
static int a = 0; //wrong
static const int a = 0; //right
- static const修饰的类成员可以进行初期化。因为const变量的初期化只执行一次。
int StringBad::num_strings = 0;
带参数的有默认值的构造函数可以作为默认构造函数。
复制构造函数:
- 声明和使用
className(const className &);
String(const String &);
String st1(st2);
String st1=st2;
String st1 = String(st2);
String *pst = new String(st1);
- 当按值传递和返回对象时,都会调用复制构造函数。
- 有时可选用传递参数的引用
如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,实现深拷贝。
赋值运算符的重载:
- 定义和使用
String & String::operator=(const String &);
String st1;
String st2;
st1 = st2; - 赋值运算符只能由类成员函数重载
- 赋值操作并不产生一个新的对象。
C语言的空指针:宏NULL
C++的空指针:nullptr
静态类成员函数
- 静态类成员函数,函数前使用static修饰
- 不能通过对象调用静态类成员函数
- 如果静态类成员函数是公有的,使用类名::函数名调用
- 静态成员函数不能访问非静态数据成员
类的数据成员使用了new:
- 多个构造函数中使用new的格式都相同,因为只有一个析构函数。
如果构造函数中使用new,析构函数要使用delete - 应定义一个复制构造函数
- 应重载赋值运算符
有关返回对象的说明:
- 返回指向const对象的引用
- 返回对象将调用复制构造函数,返回引用不会
- 引用指向的对象应在调用函数执行时存在
- 返回指向非const对象的引用
- 重载<<必须返回非const ostream对象的引用,因为如果返回对象的话,ostream类没有公有的复制构造函数。
3.返回对象 - 不能是局部变量
4.返回const对象
- 重载<<必须返回非const ostream对象的引用,因为如果返回对象的话,ostream类没有公有的复制构造函数。
什么情况下会调用析构函数?
- 动态变量,在执行完定义该对象的程序块时,调用该对象的析构函数。
- 静态变量,在程序结束时调用
3.new创建的,调用delete删除时才会调用
显式调用析构函数的顺序和new的顺序相反
重载<<运算符
ostream & operator<<(ostream &os, const class_name &obj) {
os << …
return os;
}
设置为友元函数。
转换函数
- 其他类型转换为类类型:class_name(type_name value);
- 类类型转换为其他类型:operator type_name();
- 转换函数不能有返回类型