我们可以将基类的私有成员继承到派生类的公共成员中吗?

Posted

技术标签:

【中文标题】我们可以将基类的私有成员继承到派生类的公共成员中吗?【英文标题】:Can we inherit private members of a Base class into public members of a Derived class? 【发布时间】:2021-11-15 12:33:12 【问题描述】:

问题是我需要将基类的私有成员转换为派生类公共成员,但我只能找到两种主要类型的关键字来继承 private 这是默认类型和 public 继承所有东西一样因为它们在基类中。但是我只需要将基类的私有成员继承到派生类的公共成员中。 有人可以帮我解决这个问题吗!

【问题讨论】:

我建议提供一个真实的用例,为什么你只需要继承 private members 。在这种情况下,大多数时候复合或聚合模式比继承更好。 minimal reproducible example 更好。 简短的回答是:不,你不能做你所描述的。更长的答案是:无论您的实际情况如何,都可能有一种解决方法的好方法,但这不是通过继承将私有成员公开。 派生类不能使用基类的私有成员,更不能让其他人使用它们。 如果你需要这样做,那是设计有缺陷。 这是XY problem。你为什么觉得有这种需要? 【参考方案1】:

您想要一个类Base 具有publicDataprivateData,但只有privateData 在派生类中被继承。

这可能是 XY 问题。 我假设您希望两个类具有共同的“某些数据”,但在这种情况下通过不适当的继承来实现它。

部分继承打破了继承的概念,建议使用组合。

大部分时间组合和聚合是更好的解决方案。

这是一个使用相同私有数据而不继承的组合示例。

如果您确实需要继承私有数据,请将它们保护在Base 中,并且不要公开数据。或者我建议只使用界面样式的多重继承在未来不会减少你的负担。

如果这不能回答您的问题,请更新您的问题以获取详细的用例。例如:你需要重构一些东西或一些限制。


struct Data
int val;
;

class Base
public:
void SomeFunction();

protected:
Data m_Data;
;


class Derived: public Base
// You will have protected m_Data here.
;

class AnotherClass // A class has data in common
private:
Data m_Data;
;

【讨论】:

以上是关于我们可以将基类的私有成员继承到派生类的公共成员中吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++_练习—继承_公有继承

继承是真的吗?

类的继承

多继承 与 多重继承

C++多继承

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