c++ - 我可以在派生类中继承私有(private)成员吗?

标签 c++ inheritance

我有一个基础数据成员类:

class DataClass {
}

和一个子类:

class DerivedDataClass : public DataClass {
}

我将 DataClass 用作类 DataClassList 的私有(private)成员

class DataClassList {
  public:
    // some useful functions here
  private:
    DataClass private_data;
}

我想继承 DataClassList 以创建一个可以对 DerivedDataClass 进行操作的类

class DerivedDataClassList : public DataClassList {
  // how do i get this class to use DerivedDataClass as the private member?
}

这可以用 C++ 以某种形式完成吗?

编辑: 添加更多关于我正在尝试做的事情的注释:

DataClass 有一些我不想在 DerivedDataClass 中重新定义的有用函数,DerivedDataClass 有它自己的函数。所以,继承是有道理的。到目前为止一切都很好。

下一级是问题。 DataClassList 具有依赖于 DataClass 函数的有用函数。 DerivedDataClassList 将需要从 DerivedDataClass 访问数据/运行函数,除了基类提供的有用函数。

如果不能将 DataClassList 中的私有(private) DataClass 成员更改为 DerivedDataClass,我就无法从 DerivedDataClass 调用函数> 在 DerivedDataClassList 中。

最佳答案

基本上,您不需要。私有(private)意味着私有(private)——它只属于那个类。正确的方法是有访问函数。

如果这个类有访问那个成员的特殊要求,那么它应该被保护[然而,这是一个相当愚蠢的概念,因为它根本没有提供任何保护 - 任何想要进入那个领域的人只需要从类派生,瞧,他们可以自由访问]。

感谢 jogojapan 指出我遗漏了一点。使用模板的答案是一种解决方案。另一种是在基类中使用指针,然后让访问函数将 private_data 设置为提供的类成员。哪个是“正确的”取决于你想做什么。例如,如果它是某种元素的列表(例如图形对象(窗口、菜单等)或游戏对象),而您实际上希望它们是一个列表 [或几个类似的列表],那么使用指针是正确的解决方案。如果您有多种不同类型的对象,这些对象从未以通用方式使用,那么模板类可能是正确的选择。

关于c++ - 我可以在派生类中继承私有(private)成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14109972/

相关文章:

c# - 将 C 结构与 union 编码到 C# 代码时获取垃圾数据

java - 在子类中隐藏方法

java - 在哪里放置沮丧(在调用父类(super class)中的方法之前)?

java - 为什么字段从父类打印,而方法从子类打印(Java)

c++ - 嵌套数据结构中的STL排序

C++ 日志库设置

c# - 我可以用基类的实例初始化派生类吗?

java - 如何实现抽象子类继承的方法?

C++输出格式问题

c++ - 从基类到不同派生类的多重继承转换