c – “结构默认具有公共继承”

“一个结构体默认具有公共继承”这句话的真正含义是什么?为什么下面的代码出错只是因为我在从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 = &dd;
    cc->fun();
}

解决方法

这意味着
struct c;
struct d : c

相当于

struct d : public c

您的代码是一个扩展结构的类:

struct c;
class d : c;

相当于

class d : private c;

因为默认情况下类具有私有继承.

这意味着c中所有继承而非覆盖/重载/隐藏的方法都是私有的.

相关文章

文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...
文章浏览阅读1.8k次,点赞11次,收藏37次。因为自己对决策树...
文章浏览阅读492次。C++ 设计模式之策略模式
文章浏览阅读683次。我也算是个C++的小白,对于C++中的谓语我...
文章浏览阅读225次。又看了一遍操作符的东西,感觉之前对操作...