C++ 多重继承和构造
2018-02-21 本文已影响163人
石虎132
//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄
一、多重继承:
定义:派生类继承多个基类,派生类为每个基类(显式或隐式地)指定了访问级别——public、protected 或private。
class Panda : public Bear, public Endangered {
}
二、构造:
1. 派生类的对象包含每个基类的基类子对象。
2. 派生类构造函数初始化所有基类(多重继承中若没有显式调用某个基类的构造函数,则编译器会调用该基类默认构造函数),派生类只能初始化自己的基类,并不需要考虑基类的基类怎么初始化。
3. 多重继承时,基类构造函数按照基类构造函数在类派生列表中的出现次序调用。
析构:总是按构造函数运行的逆序调用析构函数。(基类的析构函数最好写成virtual,否则再子类对象销毁的时候,无法销毁子类对象部分资源。)假定所有根基类都将它们的析构函数适当定义为虚函数,那么,无论通过哪种指针类型删除对象,虚析构函数的处理都是一致的。
三、拷贝构造/赋值:
如果要为派生类编写拷贝构造函数,则需要为调用基类相应拷贝构造函数并为其传递参数,否则只会拷贝派生类部分。
四、深拷贝与浅拷贝:
1. 浅拷贝:默认的复制构造函数只是完成了对象之间的位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一块内存。
这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。
2. 深拷贝:自定义复制构造函数需要注意,对象之间发生复制,资源重新分配,即A有5个空间,B也应该有5个空间,而不是指向A的5个空间。