Why use virtual function instead of regular?
本问题已经有最佳答案,请猛点这里访问。
在C++中,基类中的虚函数可以在派生类中重写。以及一个成员函数,其中特定的实现将取决于它在运行时被调用的对象的类型。
因为必须实现虚函数(纯虚函数除外)我可以在基类中使用正则函数并在派生类中重新定义它吗?如果是的话。使用虚拟函数有什么意义?
谢谢
你可以重新定义它,但它不会以多态的方式工作。
所以如果我有
1 2 3 4 5 6 7 8 9 | class base { int foo(){ return 3; } }; class Der : public base { int foo() {return 5;} }; |
然后有一个函数
1 2 3 4 | void dostuff(base &b) { b.foo(); // This will call base.foo and return 3 no matter what } |
我这样称呼它
1 2 | Der D; dostuff(D); |
如果我把基地改成
1 2 3 4 5 6 7 8 9 10 | class base { virtual int foo(){ return 3; } }; void dostuff(base &b) { b.foo(); // This will call the most derived version of foo //which in this case will return 5 } |
因此,真正的答案是,如果您想编写从基础调用正确函数的公共代码,那么它需要是虚拟的。
实际上,虚函数是面向对象语言的基础。在Java中,所有的函数都是虚函数。但在C++中,虚函数比正则函数慢。因此,如果不需要函数重写,则应该使用常规函数而不是虚拟函数。