【问题标题】:Why use virtual function instead of regular? [duplicate]为什么使用虚函数而不是常规函数? [复制]
【发布时间】:2013-10-26 18:50:52
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您可以隐藏一个非虚拟函数。这通常是一件坏事。
  • 你确定没有在你的书中给出?

标签: c++ virtual-functions


【解决方案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
}

所以真正的答案是,如果你想编写通用代码,从基类调用正确的函数,它需要是虚拟的。

【讨论】:

    【解决方案2】:

    实际上,虚函数是面向对象语言的基础。 在java中,所有的函数都是虚函数。 但在 C++ 中,虚函数比普通函数慢。 所以如果不需要函数覆盖,你应该使用常规函数而不是虚函数。

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2018-11-19
      • 2014-04-12
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2017-07-11
      相关资源
      最近更新 更多