为什么使用虚拟功能而不是常规?

时间:2013-10-18 03:13:57

标签: c++ virtual-functions

在c ++中,可以在派生类中重写基类中的虚函数。 和一个成员函数,其中特定的实现将取决于在运行时调用它的对象的类型。

因为必须实现虚拟功能(纯虚拟除外) 我可以在基类中使用常规函数并在派生类中重新定义它吗? 如是。 使用虚函数有什么意义?

由于

2 个答案:

答案 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 ++中,虚函数比常规函数慢。 因此,如果不需要函数覆盖,则应使用常规函数而不是虚函数。