【发布时间】:2014-01-02 21:08:58
【问题描述】:
在 C++ 中:假设我有一个类 X。这样的私有继承有什么区别:
class Deriv : private X
{
public:
//constructor etc
void method()
{
usageOfMethodFromX();
}
};
还有这个:
class Deriv
{
private:
X * m_xinstance;
public:
//constructor etc
void method()
{
m_xinstance->usageOfMethodFromX();
}
};
有什么区别不允许用派生类的成员代替私有继承,反之亦然?是一样的吗?
谢谢!
【问题讨论】:
-
简短的回答是否定的。私有继承是一种“has-a”关系,与成员变量的关系相同。
-
@ZacHowland:不完全是:即使从具有
virtual成员函数的基类私有继承,这些成员也可以被覆盖! -
派生允许您利用基础子对象布局优化。
-
不理解这里的反对意见。对于对 C++ 知之甚少的人来说,这是一个完全合理的问题。我所说的“很少”是指用不到 5 年的时间来学习 C++ 语言的方方面面。
-
@wheaties:我没有投反对票(我也不打算投反对票),但我猜反对票是因为问题是重复的......
标签: c++ inheritance