“一个结构体默认具有公共继承”这句话的真正含义是什么?为什么下面的代码出错只是因为我在从c ??派生类d时省略了关键字’public’.
struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; d dd; cc = ⅆ cc->fun(); }
解决方法
这意味着
struct c; struct d : c
相当于
struct d : public c
您的代码是一个扩展结构的类:
struct c; class d : c;
相当于
class d : private c;
因为默认情况下类具有私有继承.
这意味着c中所有继承而非覆盖/重载/隐藏的方法都是私有的.