我想要了解C++中"virtual"关键字的作用 - 考虑以下例子:
#ifdef USE_VIRTUAL
struct a {
virtual void say_hi() { std::cout << "hello from a" << std::endl; }
};
#else
struct a {
void say_hi() { std::cout << "hello from a" << std::endl; }
};
#endif
struct b : public a {
void say_hi() { std::cout << "hello from b" << std::endl; }
};
int main( int argc, char** argc )
{
a a_obj;
b b_obj;
a_obj.say_hi();
b_obj.say_hi();
}
这个程序的输出是:
hello from a
hello from b
无论a::say_hi 是否声明为虚函数,都可以正确覆盖该函数。那么声明它为虚函数的作用是什么呢?
这种情况下,将函数声明为虚函数会告诉编译器在运行时动态绑定函数调用。这样就可以更加灵活地使用继承和多态性,并且能够正确地执行子类的函数。
override
关键字来明确声明您的意图,在这种情况下,您甚至会得到一个漂亮的编译器错误提示。 - Kerrek SB