【发布时间】:2018-05-07 20:44:06
【问题描述】:
当我在基类中声明一个受保护的成员并在派生类中继承为私有时,不允许访问该成员
class base{
protected:
int a;
};
class derived : public base
{
protected:
int b;
public:
derived():base(){ a=0; b=0;}
void show(){cout<<"a= "<<a<<"\tb= "<<b;}
};
int main ()
{
derived d;
d.a=10; //error: 'int base::a' is protected within this context
d.show();
}
但是当我编写派生类时,要授予“a”的公共访问权限(在基中受保护)
class derived : public base
{
protected:
int b;
public:
base::a;
};
int main ()
{
derived d;
d.a=20; // no error
}
现在我可以在 main() 中更改 'a' 的值而不会出现任何错误。
我看过c++完整参考书,授予访问权限将恢复访问权限,但不能提高或降低访问状态。
谁能告诉我为什么我能够访问基类的受保护成员,私有继承,然后像派生类的公共变量一样提供公共访问(它不违反封装,即受保护的成员应该恢复为受保护)。 如果我的理解不正确,请指导我
【问题讨论】:
-
受保护的变量只能在派生类内部访问。受保护变量不是公共变量,可以用作
d.a=20;。 -
protected 将成员提供给其派生类,但不提供给公众(外部使用),当您公开受保护的成员时,其他人也可以公开使用它。
标签: c++ class inheritance protected