有效的c ++项目9
函数createLogString可以是虚拟的吗?
class BuyTransaction: public Transaction {
?public:
??BuyTransaction( parameters ):Transaction(createLogString(parameters)) { ... }
??...
?private:
??static std::string createLogString( parameters );
};
Run Code Online (Sandbox Code Playgroud)
是的,它可以是虚拟的(而不是静态的).但是,它仍将在构造期间静态绑定,并且不会动态分派.
使其成为虚拟的唯一要点是它是否也在类的其他成员中使用(不是构造函数/析构函数),并且派生类可能会覆盖它以对这些成员执行有用的操作.然而,这开始具有设计气味的微弱痕迹.
斯科特的建议"永远不要在构造或破坏期间调用虚函数"源于这样一个事实,即它很少能完成任何有用的事情.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |