赋值操作符
虚析构函数
和其他虚函数一样,析构函数的虚函数性质也能继承,如果层次中根类的析构函数是虚函数,则派生类的所有析构函数都将是虚函数,无论是派生类显示定义还是使用合成的虚析构函数,派生类的析构函数都将是虚函数。
所以继承层次中的根类析构函数应该定义为虚函数。
构造函数和赋值操作符不是虚函数
子类成员或函数覆盖基类
如果基类和派生类使用统一名字的成员函数,则在派生类作用域中屏蔽基类成员。
确定多类继承中的函数调用:
首先, 确定对象、指针和引用的静态类。
然后,在该类中查找所用调用的函数,如果找到并且判断其形式参数等,调用合法则停止,否则递归往基类找。
最后,判断是否满足多态的定义,满足则用RTTI.
class Base
{
public:
virtual void fcn(int i)
{
cout<<i<<endl;
}
virtual void fcn()
{
cout<<"Base::fcn"<<endl;
}
};
class Derived1:publicBase
{
public:
void fcn()
{
cout<<"Derived1::fcn"<<endl;
}
};
class Derived2
{
public:
void fcn()
{
cout<<"Derived2::fcn"<<endl;
}
void fcn(int i)
{
cout<<"i值是 "<<i<<endl;
}
};
int main()
{
Derived1 b1;
//b1.fcn(); //output:Derived1::fcn
//b1.fcn(3); //调用失败,因为子类将基类屏蔽
Derived2 b2;
//b2.fcn(); //output:Derived::fcn
//b2.fcn(2); //output:i值是1
Base *b=new Base;
b=&b1;
//b->fcn(); //output:Derived1::fcn
b->fcn(2); //output :2
getchar();
}
多重继承
Class Panda:publicBear,pubic Endangerd
派生类构造函数应该初始化所有基类,按照基类构造函数在派生类中出现的次序调用,按构造函数的逆序调用析构函数,派生类指针和引用可以转换为任意基类的指针或引用。
多重继承的派生类有可能从两个或多个基类继承同名成员,对成员不加限定的使用会造成二义性。