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(); // 错误,模棱两可