class B
{
protected:
int x;
public:
B(int i=28) { x=i; }
virtual B f(B ob) { return x+ob.x+1; }
void afisare(){ cout<<x; }
};
class D: public B
{
public:
D(int i=-32):B(i) {}
B f(B ob) { return x+ob.x-1; }
};
void test6()
{
B *p1=new D, *p2=new B, *p3=new B(p1->f(*p2));
p3->afisare();
}
main只调用函数test6(); 我的问题是,为什么编译器会在第3行抛出错误,at int x声明,带有消息:
In member function 'virtual B D::f(B)' :
error: 'int B::x' is protected
error: within this context
PS:这个例子来自考试,因此错误的缩进和其他的泄漏&#34;故意。
答案 0 :(得分:1)
D
可以访问B
的成员x
,但只能访问其继承的成员。它无法访问另一个B实例的成员x
。
编辑:更正了答案。