第十二章 C++PrimerPlus 类和动态内存分配
1、类的静态成员的特点:无论是创建多少对象,程序都只创建一个静态变量的副本。也就是说,类的所有对象共享一个静态成员。
2.类的定义只是声明,并不为其中的成员分配空间。作为声明语句,末尾要有分号。
3.设计的类中,C++提供下面这些成员函数:
1)默认构造函数,如果没有定义
只能有一个默认构造函数
2)默认析构函数,如果没有定义
释放统一内存两次可能会引起不必要的麻烦
3)复制构造函数,如果没有定义
用于将一个对象复制到新创建的对象中。原型如下:
Class_name(const Class_name &); 这样的构造函数在执行Class_name A = B;时会被调用。注意,每当程序员生成了对象副本时,编译器都将调用复制构造函数。默认的复制构造函数只会逐个复制非静态成员,当类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,这被称为深度复制。(只复制指针,不复制内容,被称为浅复制)
4)赋值运算符,如果没有定义
下面的语句会调用复制运算符,Class_name A ; A = B;注意赋值运算符的原型如下:Class_name & Class_name::operator=(const Class_name &);注意系统默认的赋值运算符和复制运算符都是浅拷贝的。
5)地址运算符,如果没有定义
与我们的初衷相同,使用系统默认的即可
4、不能通过对象调用静态成员函数,静态成员函数甚至不可以使用this指针调用。如果静态成员函数在公共部分声明,可以使用类型::的方式调用。因为静态成员函数不与特定的对象相关联,因此只能使用静态数据成员。
5、在构造函数中使用new时应注意的事项:
6、如果类的成员有常量,在构造函数对其初始化时,则需要使用c++提供的一种特殊的语法完成。这种方法叫做初始化列表,这种语法只能在构造函数中使用。