一、本文目的与说明 1
本文目的:理清在各种继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的特殊性,所以在总结它的性质时将它单独列出来了
单继承、多继承、虚继承,既然都属于继承,那么虽然有一定的区别,但还是相同点比较多
如果放在一块讲,但为了将内容制作成递进的,就分开了,对相同点进行重复,(大量的复制粘贴哈),但在不同点进行了标注
注意:三块内容是逐步递进的 如果你懂虚函数,那么单继承和多继承那块你就可以不看; 如果你懂多继承,那单继承你就不要看了,至于虚继承就等你懂虚继承再回来看吧; 如果你只懂单继承,那你就只看单继承就好
二、基本知识 1
对于一个空类,例如; [cpp] view plaincopyprint
class EmptyClass{}; 虽然你没有声明任何函数,但是编译器会自动为你提供上面这四个方法
[cpp] view plaincopyprint
class EmptyClass { 2
public: 3
EmptyClass(); // 默认构造函数 4
EmptyClass(const EmptyClass &rhs); // 复制构造函数 5
~ EmptyClass(); // 析构函数 6
EmptyClass& operator=(const EmptyClass &rhs); // 赋值运算符 7
} 对于这四个方法的任何一个,你的类如果没有声明,那么编译器就会自动为你对应的提供一个默认的
(在《C++ primer》中,这个编译器自动提供的版本叫做"合成的***",例如合成的复制构造函数)当然如果你显式声明了,编译器就不会再提供相应的方法
合成的默认构造函数执行内容:如果有父类