1、对于虚拟函数,子类里的成员访问权限符可以和父类不同。即对于基类的函数func如果是public的,子类中它可以是private的。
class Base
{
public:
Base();
virtual ~Base();
public:
virtual void func(void); // 公有
};
class Derived : public Base
{
public:
Derived();
virtual ~Derived();
private:
void func(void); // 私有,和父类不同
};
Base * pB = new Base();
pB->func();
pB = new Derived();
pB->func(); // 正常访问
Derived * pD = new Derived();
// pD->func(); 不能访问
2、“存取限制”不能解除“因多继承而得的members”的模棱两可的状态。原因:改变某个class member的可存取性,绝不应该连带改变程序的意义。
class Base1 {
public:
int doIt();
};
class Base2 {
private:
int doIt(); // 不管这里是public,protected还是private,都会产生模棱两可
}
class Derived: public Base1, public Base2 {
}
Derived d;
int i = d.doIt(); // 错误,模棱两可