一,继承
1.拷贝构造函数
拷贝构造函数难以维护,且由程序人员维护;
未动态申请空间或不需要外部资源,就不要写拷贝构造函数,系统自主合成的构造函数可以负荷
(1)基类有拷贝构造函数,派生类无拷贝构造函数:合成一个拷贝构造函数,即可以调动基类的拷贝构造函数,也可以合成调动派生类的拷贝构造函数
(2)基类无拷贝构造函数,派生类有拷贝构造函数:合成一个拷贝构造函数,无法去调动基类的拷贝构造函数(不会反向要求基类产生一个合法的拷贝构造函数)
(3)基类,派生类均有拷贝构造函数:由于构造派生类对象时需先构造基类对象,所以在派生类的拷贝构造函数中,需明确告知调动基类拷贝构造,否则默认引用基类的缺省拷贝构造函数。
(4)基类,派生类均无拷贝构造函数:用子对象构建另一子对象时,将子对象的地址抓住,按位拷贝
2.赋值函数
(1)基类无复写赋值语句,派生类有复写赋值语句:按要求合成一个赋值语句
(2)基类有复写赋值语句,派生类无复写赋值语句:派生类也会产生一个赋值语句
(3)基类,派生类均有复写赋值语句:需显示的说明调用基类的赋值语句,即在派生类中调动基类的赋值语句,否则无法调动基类的赋值语句
(4)基类,派生类均无复写赋值语句(即有缺省赋值语句):将合成赋值语句,两个对象同时赋值(正常赋值)
class Object
{
int value;
public:
Object(int x = 0) :value(x) {
cout << "construct object: " << this << endl;
}
Object(const Object& obj) :value(obj.value)
{
cout << "copy construct object: " << this << endl;
}
Object& operator=(const Object& obj)
{
if (this != &obj)
{
value = obj.value;
}
cout << "Object = " << endl;
return *this;
}
~Object()
{
cout