子类是不是也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗?

Posted

技术标签:

【中文标题】子类是不是也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗?【英文标题】:Does the sub class inherit the private data members too in c++? But are accessed through the public methods of the super class?子类是否也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗? 【发布时间】:2017-03-30 05:08:23 【问题描述】:

我是 C++ 新手。我曾经相信超类的私有数据成员和成员函数不会被派生类继承。但最近我看到一个程序,其中超类的私有成员可以通过其公共成员函数访问。当派生类没有私有数据成员时怎么可能......?如果我错了,请清除我的概念。

【问题讨论】:

有可能是因为子类是-a 超类。这就是继承的意思。因此它必须继承私有成员。 所以你说它也继承了私有成员,但它们只对超类的公共方法可见? 没错。更准确地说:它们只能在对象的静态类型被假定为超类的范围内访问。 【参考方案1】:

当一个类的私有数据成员设置为private时,其他类无法访问它们。

但是通过使用返回函数,子类可以从父类中检索私有数据成员。

例子

class Parent
    int age = 35;

    public int getAge()
        return age;
    


class Child : public Parent



int main()
    Child c;
    printf("%d", c.getAge());
    return 0;

输出将是

35

【讨论】:

【参考方案2】:

曾经认为超类的私有数据成员和成员函数不被派生类继承。

你的理解有点问题。

私有成员仍然存在于基类中。派生类根本无法直接访问它们。

【讨论】:

以上是关于子类是不是也继承了 C++ 中的私有数据成员?但是是通过超类的公共方法访问的吗?的主要内容,如果未能解决你的问题,请参考以下文章

在c++中的继承,如何在子类中重载成员函数

请教C++高手: 关于类的继承,当子类以public方式继承基类之后,根据继承的规则,基类的所有数据成员和成

继承 Java 私有成员

java中私有的属性、静态成员可以被子类继承吗?

C++继承:公有,私有,保护

子类可以继承父类的一切方法,成员变量,甚至是私有的,但是却不能够访问这些私有的成员变量和方法