我很难理解C++中关键字virtual
的用途。我知道C和Java非常好,但我是新的C++麻烦理解C++`virtual`
维基百科
在面向对象的编程中, 虚函数或虚方法是 一个函数或方法,其行为 能通过具有相同 签名的函数在继承 类中被覆盖。
但是我可以重写的方法作为不使用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 ::一个可以成功地与B ::一个重写而无需virtual
复利我的困惑是有关虚拟析构函数这一说法,也从维基百科
,如以下示例所示, 对于C++基类 具有虚拟析构函数以确保 总是调用最多的派生类的析构函数是很重要的。
那么virtual
也告诉编译器调用父类的析构函数吗?这似乎是从我原来的virtual
理解非常不同,因为“做的函数重写”
不需要用new/delete将例子复杂化:'B obj; A * p = &obj;'或'A&ref = obj;' – 2009-12-01 21:52:17
正确 - 我在第一次编辑时实际上忽略了删除操作;但C++中的解引用语义也很复杂...... ;-) – ConsultUtah 2009-12-01 21:55:26