如果没有显式调用,那么将会隐式地调用基类的默认构造函数完成基类部分成员的定义,这样最终得到的派生类对象就很奇怪了。
7.3.2 派生类赋值操作符
与复制构造函数类似,必须显式地调用基类的基类的赋值函数。
Derived& Derived::operator=(const Derived &rhs) { if (this != &rhs) { Base::operator=(rhs); // then do } return *this; }
7.3.3 派生类的析构函数
派生类析构函数不负责撤销基类对象的成员。编译器总是显式调用派生类对象基类部分的析构函数。每个析构函数只负责清除自己的成员。
7.3.4 虚析构函数
Item_base *itemP = new Item_base; delete itemP; itemP = new Bulk_item; delete itemP;
上面中,在delete指向类的指针时,将调用析构函数,可是这里itemP可能指向基类也可能指向派生类,所以这时候应该在运行阶段根据类型去调用不同的析构函数。
所以基类的析构函数为虚函数:virtual ~Item_base(){}
7.3.5 在构造函数和析构函数中调用虚函数
运行的是为构造函数或析构函数自身类型定义的版本。