c++ - 为什么使用虚函数而不是常规函数?

标签 c++ virtual-functions

<分区>

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

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

谢谢

最佳答案

您可以重新定义它,但它不会以多态方式工作。

如果我有一个

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
}

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

关于c++ - 为什么使用虚函数而不是常规函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440989/

相关文章:

c# - 将基类中最复杂的方法声明为虚方法

java - 装饰器模式丢失了虚方法查找。有什么好的选择或解决方法吗?

boost::scoped_ptr 的 C++ 析构函数问题

c++ - 如何使用 C++ 和 WinAPI 检查 Web 浏览器是否正在运行?

c++ - 全屏运行 C++ 控制台程序

c++ - c++中有事件吗?

c# - C# 中的 C++ "system()"

c++ - 这段 C++ 代码的安全性和独立于编译器的程度如何?

c++ - 为什么定义纯虚函数有意义?

c++ - "delay"构造 C++ 对象最惯用的方法是什么?