HTML5 专栏程序员

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个空间。

谢谢!!!

上一篇下一篇

猜你喜欢

热点阅读