【发布时间】:2009-12-01 21:21:42
【问题描述】:
我无法理解 C++ 中 virtual 关键字的用途。我非常了解 C 和 Java,但我是 C++ 新手
来自维基百科
在面向对象编程中,一个 虚函数或虚方法是 其行为的函数或方法 可以在继承中被覆盖 由具有相同功能的函数分类 签名。
但是我可以在不使用 virtual 关键字的情况下覆盖如下所示的方法
#include <iostream>
using namespace std;
class A {
public:
int a();
};
int A::a() {
return 1;
}
class B : A {
public:
int a();
};
int B::a() {
return 2;
}
int main() {
B b;
cout << b.a() << endl;
return 0;
}
//output: 2
如下所示,函数 A::a 被 B::a 成功覆盖,不需要 virtual
同样来自维基百科的关于虚拟析构函数的声明让我更加困惑
如下例所示, 这对于 C++ 基类很重要 有一个虚拟析构函数来确保 从最 派生类将始终被调用。
所以virtual 也告诉编译器调用父级的析构函数?这似乎与我最初对virtual 的理解大不相同,即“使函数可覆盖”
【问题讨论】:
标签: c++ virtual-functions