记C++类成员访问权限符二三事

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


原文地址:https://www.cnblogs.com/javawebsoa/p/3053849.html