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