我总是看到很多例子,其中虚函数在头文件中被声明为受保护。将虚拟函数声明为public是错误的吗?使用虚拟功能时的最佳做法是什么?
答案 0 :(得分:3)
将虚拟函数声明为public是错误的吗?
没有
使用虚拟功能时的最佳做法是什么?
这完全取决于您的使用案例。关键字本身在使用上是正交的。
有时候protected
virtual
函数与template design pattern一样好,大多数情况下virtual
函数被声明为public
以提供接口
public
和protected
继承有两种设计模式类别:
模板功能模式:
class Base {
public:
void foo() {
bar();
};
protected:
virtual void bar() = 0;
};
class Implementation : public Base {
void bar() {
// provide the implementation
}
};
界面模式:
struct Interface {
virtual void foo() = 0;
virtual ~Interface() {}
};
class Implementation : public Interface {
public:
void foo() {
// provide the implementation
}
};
还有其他设计模式,可能完全忽略virtual
(请参阅CTRP),但仍保留public
和protected
的语义。