私有继承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 */
};
Run Code Online (Sandbox Code Playgroud)
C将无法使用任何B字段.我何时会使用私有继承,何时使用合成?
谢谢!
Alo*_*ave 20
这个C++ FAQ条目恰当地回答了你的问题.
在这里复制它:
尽可能使用组合,必要时使用私有继承.
通常,您不希望访问太多其他类的内部,而私有继承会为您提供一些额外的功能(和责任).但私人继承并不邪恶; 它的维护成本更高,因为它增加了某人更改破坏代码的可能性.
私有继承的合法,长期使用是当你想构建一个class Fred使用a 中的代码时class Wilma,代码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";
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |