Fra*_*ank 8 c++ inheritance abstract-class virtual-functions function
我在库中找到了以下代码:
class Bar {
public:
bool foo(int i) {
return foo_(i);
}
private:
virtual bool foo_(int i) = 0;
};
Run Code Online (Sandbox Code Playgroud)
现在我想知道:你为什么要使用这个间接?可能有任何理由说明为什么上述会比简单的替代方案更好:
class Bar {
public:
virtual bool foo(int i) = 0;
};
Run Code Online (Sandbox Code Playgroud)
Mic*_*fik 10
这是非虚拟接口成语(NVI).Herb Sutter的那篇页面有很多细节.但是,使用C++ FAQ Lite 在这里和这里所说的内容,可以缓解你所阅读的内容.
NVI的主要优点是将接口与实现分离.基类可以实现通用算法并将其呈现给世界,而其子类可以通过虚函数实现算法的细节.外部用户可以避免算法细节的变化,特别是如果您以后决定要添加预处理和后处理代码.
明显的缺点是你必须编写额外的代码.此外,private虚拟功能让很多人感到困惑.许多程序员错误地认为你无法覆盖它们.Herb Sutter似乎喜欢private虚拟,但恕我直言,它在实践中更有效地遵循C++ FAQ Lite的建议并制作它们protected.
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |