【问题标题】:Base class private member belongs to which part of Derived class?基类私有成员属于派生类的哪一部分?
【发布时间】:2018-01-05 06:14:10
【问题描述】:
class base {
    public:
        int getC() {return c;}
        int a;
    protected:
        int b;
    private:
        int c;
}

class derived: public base {
    public:
        int getD() {return d;}
    private:
        int d;
}

现在,派生类有公共成员:

int getC() {return c;}
int getD() {return d;}
int a;

受保护的成员: int b; 私人会员: int d; 我无法确认int c; 是否是派生类的私有成员。很明显class derived的任何新成员函数都不能访问c。因此,如果cclass derived 的私有成员,则class derived 的成员函数应该有权访问c。那么c是一个什么样的类派生成员呢?

【问题讨论】:

  • c 不是derived 的成员,它是base 的成员,就像ab 一样。
  • 所以,aderived 的公共成员? bderived?@n.m. 的受保护成员。
  • 他们不是derived的成员。

标签: c++ inheritance


【解决方案1】:

派生类不会继承对私有数据成员的访问权限。但是,它确实继承了一个完整的父对象,其中包含该类声明的所有私有成员。

看看这个question

【讨论】:

  • 所以,这意味着派生类继承了一个完整的父对象,所以基类中的私有成员也是派生类的私有成员,但是这个私有成员是特殊的,因为派生类没有继承对私有数据成员的访问权?
  • 听着,简单来说,我会尽力解释。如果基类中有private 成员,您想通过派生类的成员访问该成员,则在基类中创建一些publicprotected 成员函数(getter 和setter)。在您的情况下,您无法从派生类访问基类的变量a,为此,请在publicprotected 中的基类中创建一些getter 和setter。我希望这会有所帮助。
  • 感谢您的解释,我了解如何从派生类访问基类的私有成员。我的问题很简单,基类的私有成员是否属于派生类的私有成员?从你的回答中,我知道,是的,基类的私有成员属于派生类的私有成员,它只是派生类不能直接访问它的特殊成员。
  • 是的,就是这样。如果您通过我在答案中提供的链接会更好。
【解决方案2】:

我会用一个例子来说明这一点。

  • 考虑一个公共变量和方法不在你的 屋。任何知道你的房子(类对象)的人都可以访问它们。
  • 受保护的变量和方法就像您家中的公共区域,例如大厅、厨房,只有您家中的成员可以访问它们。
  • 私人会员就像你父母的房间(基类)(即只有你的父母可以进入他们的房间,你不知道里面有什么)

现在问题来了,每个类访问修饰符都有以下排列

基础

private : int c;

protected : int b;

public : int getC() {return c;}

         int a;

派生

private : int d; (derived will never know c's existense)
protected : int b; (base class's copy)    
public : int getC() {return c;}    
         int a;
         int getD() {return d;}

【讨论】:

  • 你好,我和你的理解是一样的,重点是derived其实从来不知道c的存在,但是c真的存在于类derived中,就像这个answer
  • 当然“c”仍在派生中,请参阅ideone.com/LPR7g2
  • @buweilv 它在那里,但你不能直接访问它,虽然你可以通过 getC 访问它,derived 继承自 base
猜你喜欢
  • 1970-01-01
  • 2017-04-14
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多