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

时间:2010-05-29 01:59:56

标签: c++ class inheritance

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

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

在这种情况下y如何访问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;
}

同样的问题?

抱歉,我觉得我写的太多了 再见

3 个答案:

答案 0 :(得分:5)

  1. 在所有形式的继承中:

    • y可以查看其基类(x)并查看publicprotected
    • y的派生类可以看到其publicprotected成员。
    • y的用户可以看到其public成员。
    • 没有人可以看到其他人的private,除非他们是friend
  2. 在公共继承中:

    • y的用户可以查看x并查看public
  3. 在受保护的继承中:
    • public的{​​{1}}和protected部分x成为protected
    • y的派生类可以看到它们。
    • y的用户看不到它们。
  4. 私有继承:
    • y中的publicprotected部分x成为private中的y
    • y派生的贱民看不到他们。
    • y的用户看不到它们。
    • 私有继承与组合(私有数据成员)基本相同。
  5. This C++ FAQ提供有关私有和受保护继承的良好信息。

答案 1 :(得分:0)

  • 派生类只能访问基类的公共成员和受保护成员。它无法访问基类的私有成员。
  • private / public / protected inheritance影响派生类(X)的“用户”可以访问从基类继承的成员(Y);现在,用户可以是从这个派生类派生的类。
  • 私有继承类似于在派生类中将基类的公共成员和受保护成员声明为私有。
  • **protected interitance**类似于在派生类中声明基类的public和protected成员。
  • **public inheritance**使派生类中的基类的公共成员成为公共成员;但是派生类中的受保护的基类成员仍然受到保护

答案 2 :(得分:0)

  • 派生类无法访问基类的私有成员,除非派生类是基类的朋友。
  • 继承权限:
    • 公共 - 基类的所有非私有成员都保留其权限(base:public,derived:public; base:protected,derived:protected)
    • 受保护 - 基类的所有公共成员在派生类中受到保护;基类中的受保护成员仍受保护(base:public,derived:protected; base:protected,derived:protected)
    • Private - 基类的所有非私有成员在派生类中变为私有(base:public,derived:private; base:protected,derived:private)

我无法强调基类的私有成员无法被派生类访问的事实,除非该派生类被声明为基类中的朋友。