【发布时间】:2014-02-20 21:58:55
【问题描述】:
当我在Sub::f() 中并尝试访问Base* b 指针指向的另一个子类的受保护成员时,直到Sub 成为Base 的朋友时它才会编译。为什么我需要这样做?
class Base{
//friend class Sub;
protected:
int i;
virtual void f() = 0;
};
class Sub : public Base{
Base* b;
public:
Sub(Base* ba) : b(ba){}
void f(){
b->f();
cout << b->i << endl;
}
};
【问题讨论】:
-
因为这就是
friend。 -
因为你只能让你的朋友碰你的私处。
-
但是
Sub继承了Base的所有内容。派生类不能访问其基类的受保护成员吗? -
如果您遇到特定问题,请尝试发布更完整和独立的示例。