关于 C++ 中的类派生的问题?

Posted

技术标签:

【中文标题】关于 C++ 中的类派生的问题?【英文标题】:question about class derivation in c++? 【发布时间】:2010-05-29 01:59:55 【问题描述】:

我想知道一些关于 C++ 中的类派生的事情 所以我有超类 x 和继承的类 y 我这样做了

class x
    public:a;
    private:b;
    protected:c;
    
class y:public x
    public:d;

在这种情况下,您如何访问 a、b 和 c 以及我的意思是(公共、受保护、私有)

第二种情况:

class x
    public:a;
    private:b;
    protected:c;
    
class y:private x
    public:d;

同样的问题?

第三种情况:

class x
    public:a;
    private:b;
    protected:c;
    
class y:protected x
    public:d;

同样的问题?

对不起,我觉得我写的太多了 再见

【问题讨论】:

如果你没有,我建议你买一本The Definitive C++ Book Guide and List推荐的初学者书籍 【参考方案1】:

    在所有形式的继承中:

    y 可以查看其基类 (x) 并查看 publicprotectedy 的派生类可以看到其publicprotected 成员。 y 的用户可以看到其public 成员。 没有人可以看到其他人的 privates,除非他们是 friends。

    在公共继承中:

    y 的用户可以查看x 并查看public。 在受保护的继承中: publicprotected 的一部分 xy 中变为 protected y 的派生类可以看到它们。 y 的用户看不到他们。 在私有继承中: publicprotected 的一部分 xy 中变为 privatey 的派生 lasses 看不到它们。 y 的用户看不到他们。 私有继承本质上与组合(私有数据成员)相同。

This C++ FAQ 有很好的关于私有和受保护继承的信息。

【讨论】:

在C++的土地上,朋友们可以看到你的隐私。永不说永不。 ;-) 不错的答案。彻底、完整、简洁。【参考方案2】: 派生类只能访问基类的公共和受保护成员。它不能访问基类的私有成员。 private/public/protected 继承影响从基类 (X) 继承的成员如何被派生类 (Y) 的“用户”访问;现在,用户可以是从这个派生类派生的类。 私有继承类似于在派生类中将基类的公共和受保护成员声明为私有。 **protected interitance** 类似于将基类的公共成员和受保护成员声明为派生类中的受保护成员。 **public inheritance** 使基类的公共成员在派生类中公开;但是基类的受保护成员在派生类中仍然受到保护

【讨论】:

【参考方案3】: 派生类不能访问基类的私有成员,除非派生类是基类的友元。 继承权限: 公共 - 基类的所有非私有成员保留其权限(基类:公共,派生:公共;基类:受保护,派生:受保护) 受保护 - 基类的所有公共成员在派生类中都受到保护;基类中的受保护成员仍受保护(基类:public,派生:受保护;基类:受保护,派生:受保护) 私有 - 基类的所有非私有成员在派生类中变为私有(基类:公共,派生:私有;基类:受保护,派生:私有)

我怎么强调都不过分,即基类的私有成员不能被派生类访问,除非派生类被声明为基类中的友元。

【讨论】:

以上是关于关于 C++ 中的类派生的问题?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 包含两个派生自同一个基类的类

无法将派生类 push_back() 推入 C++ 中的 STL 列表

C++:当包含从类模板派生的类的标头时,编译器警告 C4505

继承&派生

C++类的继承与派生

Visual Studio 和使用 C++ 中的类工厂自动创建对象