构造函数初始化类对象
构造函数:主要功能就是创建对象时给对象变量赋值。可以重载。
特点:
- 构造函数的命名必须与类名完全相同;
- 构造函数的主要功能是在创建对象时定义初始化状态,他没有返回值,也不能用void修饰;
- 构造函数不能直接调用,必须通过new运算符在创建对象时才会自动调用;
- 定义一个类时,通常情况下都会显示该类的构造函数,并在函数中指定的初始化也可省略。
析构函数清除类对象
PS:不能重载,一个类智能有一个析构函数。
何时需要释放对象?
- 使用new分配的对象被delete删除;
- 一个具有快作用域的本地(自动)对象超出其作用域;
- 临时对象的生存周期结束;
- 程序运行结束;
- 使用完全限定名显示调用对象的析构函数。
定义: - 析构函数不能带有参数。
- 析构函数不能有任何返回值。
- 在析构函数中不能使用return语句。
- 析构函数不能定义为const、volatile、static。
class people
{
public:
people()
{
cout<<"construct<<endl;//构造函数
}
~people()
{
cout<<"dispose"<<endl;//析构函数
}
默认构造函数
在C++中,只有以下四种情况才会构造一个默认构造函数:
- 一个类中,带有含有默认构造函数的成员类,才会自动生成一个构造函数。
- 一个类继承于带有默认构造函数的基类。
- 类中带有虚函数会生成默认构造函数。
- 带有虚基类的类会生成默认的构造函数。
重载构造函数
定义:参数个数或参数类型不同的另一个函数,实现重载了构造函数。
拷贝构造函数
- 拷贝构造函数的名字必须与类名相同,并且没有返回值。
- 拷贝构造函数只有一个参数,这个参数是这个类的一个地址引用。
- 在类中,如果不定义拷贝构造函数,系统会生成一个默认的拷贝构造函数。
深拷贝与浅拷贝
若果一个类拥有一个新资源,当这个类的对象发生复制过程时,资源重新分配,这个个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。
难点解析
- 派生类如何初始化成员?
答:派生类构造函数间接调用基类的构造函数来实现,派生类初始化列表必须明确指出基类的初始化形式。 - 基类与派生类构造函数的执行顺序?
答:最基础类的构造函数首先被执行,然后才是上一层的构造函数,如此到最外层的继承类,这个过程必须严格执行,否则,继承类就有机会访问还没有构建好的基类的数据和函数。基类->派生类 - 基类与派生类析构函数执行顺序
答:与构造函数正好相反,析构函数从最外层开始执行,基础类的析构函数是最后执行的,如同剥壳一样。派生类->基类