私有继承VS组合。
我有点困惑何时使用它们。由于私有继承在某种程度上密封了继承链,给出:
class A
{
private:
int z;
protected:
int y;
public:
int x;
};
class B : private A
{
/* B's data members and methods */
/* B has access only to A's public and protected */
};
class C : public B
{
/* can access no fields of B */
};
C
将无法使用任何B
的字段。什么时候使用私有继承,什么时候使用组合?
thanks!
此 C++ 常见问题解答条目 https://isocpp.org/wiki/faq/private-inheritance#priv-inherit-vs-compos恰当地回答你的问题。
在这里复制它:
可以时使用组合,必要时使用私有继承。
通常,您不想访问太多其他类的内部结构,而私有继承为您提供了一些额外的权力(和责任)。但私人继承并不是邪恶的,而是邪恶的。只是维护成本更高,因为它增加了有人更改某些内容而破坏您的代码的可能性。
私有继承的合法、长期使用是当您想要构建一个class Fred
使用 a 中的代码class Wilma
,以及来自的代码class Wilma
需要从新类中调用成员函数,Fred
。在这种情况下,Fred
调用非虚函数Wilma
, and Wilma
本身的调用(通常是纯虚函数),被覆盖Fred
。如果用组合来做到这一点会困难得多。
class Wilma {
protected:
void fredCallsWilma()
{
std::cout << "Wilma::fredCallsWilma()\n";
wilmaCallsFred();
}
virtual void wilmaCallsFred() = 0; // A pure virtual function
};
class Fred : private Wilma {
public:
void barney()
{
std::cout << "Fred::barney()\n";
Wilma::fredCallsWilma();
}
protected:
virtual void wilmaCallsFred()
{
std::cout << "Fred::wilmaCallsFred()\n";
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)