当一个方法被声明为virtual
在类中,会自动考虑其在派生类中的重写virtual
同样,C++ 语言使此关键字virtual
在这种情况下可选:
class Base {
virtual void f();
};
class Derived : public Base {
void f(); // 'virtual' is optional but implied.
};
我的问题是:这样做的理由是什么virtual
选修的?
我知道编译器并不是绝对有必要被告知这一点,但我认为如果编译器强制执行这样的约束,开发人员将会受益。
例如,有时当我阅读其他人的代码时,我想知道一个方法是否是虚拟的,我必须追踪它的超类来确定这一点。以及一些编码标准(Google http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Inheritance#Inheritance)使其成为“必须”virtual
所有子类中的关键字。
是的,在这种情况下让编译器强制执行虚拟确实会更好,而且我同意这是为了向后兼容性而维护的设计错误。
然而,有一个技巧如果没有它就不可能实现:
class NonVirtualBase {
void func() {};
};
class VirtualBase {
virtual void func() = 0;
};
template<typename VirtualChoice>
class CompileTimeVirtualityChoice : public VirtualChoice {
void func() {}
};
通过上面的内容,我们可以在编译时选择是否需要函数的虚拟性:
CompileTimeVirtualityChoice<VirtualBase> -- func is virtual
CompileTimeVirtualityChoice<NonVirtualBase> -- func is not virtual
...但同意,对于寻求函数虚拟性的成本来说,这是一个小小的好处,而我自己,我总是尝试在适用的地方键入 virtual 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)