c++ - "a struct has public inheritance by default"

标签 c++ inheritance

“默认情况下结构具有公共(public)继承”这句话的真正含义是什么?为什么下面的代码错误只是因为我在从 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;

因为 class 默认有私有(private)继承。

这意味着所有从 c 继承的而不是覆盖/重载/隐藏的方法在 d 中都是私有(private)的。

关于c++ - "a struct has public inheritance by default",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473284/

相关文章:

c++ - 向 QGraphicsScene 添加项目时的两个错误

c++ - 在 C++14 的 Variadic 模板中选择可调用类型和不可调用类型是否有一个优雅的解决方案

C++抽象基类和继承

c# - C#接口(interface)和继承的问题

c# - 将具有/相同基类的两个不同类放在同一个列表中的更好方法?

c++ - 使用指定的分隔符逐行解析文本文件

c++ - 定义 BIT0、BIT1、BIT2 等而不使用#define

c++ - 在 C++ 代码中调用 Matlab - 使用 engine.h 中的方法

Javascript OOP : should methods be enumerable?

c++ - 通过调用两个参数化的父类构造函数来构造继承类