在c ++中,可以在派生类中重写基类中的虚函数。 和一个成员函数,其中特定的实现将取决于在运行时调用它的对象的类型。
因为必须实现虚拟功能(纯虚拟除外) 我可以在基类中使用常规函数并在派生类中重新定义它吗? 如是。 使用虚函数有什么意义?
由于
答案 0 :(得分:1)
您可以重新定义它,但它不会以多态方式工作。
所以,如果我有一个
class base
{
int foo(){ return 3; }
};
class Der : public base
{
int foo() {return 5;}
};
然后有一个基础
的函数void dostuff(base &b)
{
b.foo(); // This will call base.foo and return 3 no matter what
}
我称之为
Der D;
dostuff(D);
现在,如果我将基数更改为
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
}
所以真正的答案是,如果你想编写一个公共代码,它将从它需要虚拟的基础调用正确的函数。
答案 1 :(得分:0)
实际上,虚函数是面向对象语言的基础。 在java中,所有函数都是虚函数。 但在c ++中,虚函数比常规函数慢。 因此,如果不需要函数覆盖,则应使用常规函数而不是虚函数。