私有继承与组合。
我有点困惑,什么时候使用每一个。由于私有继承密封,在某种程度上,继承链,给定:
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
的任何字段。我什么时候使用私有继承,什么时候使用组合?
谢谢!
发布于 2011-08-27 02:32:47
恰如其分地回答了您的问题。
在这里复制它:
在可以的时候使用组合,在必要的时候使用私有继承。
通常,您不希望访问太多其他类的内部结构,而私有继承给了您一些额外的权力(和责任)。但是私有继承并不是邪恶的;它只是维护成本更高,因为它增加了某人更改某些东西从而破坏您的代码的可能性。
当您想要构建一个使用class Wilma
中的代码的class Fred
,并且class Wilma
中的代码需要调用您的新类Fred
中的成员函数时,私有继承是一个合法的、长期的用途。在这种情况下,Fred
调用Wilma
中的非虚拟变量,而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";
}
};
https://stackoverflow.com/questions/7209019
复制相似问题