Jor*_*ans 10
首先是一个略显迂腐的评论 - 在C++标准中我们称它们为成员函数,而不是方法,尽管这两个术语是等价的.
我认为有两个原因不能使成员函数成为虚拟的.
当你设计一个类时,你应该对它是否代表一个接口(在这种情况下你标记适当的可重写方法和析构函数虚拟)有一个很好的想法,或者它的目的是按原样使用,可能与其他对象组合或组合.
换句话说,你的课程意图应该是你的指导.使一切虚拟化通常是过度的,有时会误导哪些方法旨在支持运行时多态性.
这是一个棘手的问题。但是要遵循一些准则/经验法则。
virtual
方法,一旦需要派生,就只virtual
需要在子类中自定义那些方法即可。virtual
方法,则析构函数应为virtual
(讨论结束)。virtual
方法不公开,并提供负责评估前后条件的公共包装器,以使派生类不会意外破坏它们。我认为这些很简单。我绝对放过反射的ABI部分,它仅在提供DLL时有用。