我们先举个例子:
class A
{
public:
fun(){printf("A fun/n");}
virtual fun1(){printf("A fun1");}
};
class B : public A
{
public:
fun(){printf("B fun/n");}
fun1(){printf("B fun1");}
};
void main() /*程序输出结果: */
{
A a;
B b;
A* p = &a;
p->fun(); /*A fun */
p->fun1(); /*A fun1 */
p = &b;
p->fun(); /*A fun */
p->fun1(); /*B fun1 */
}
可以看出virtual 声明的函数可以被子类的同名函数替换,此时基类的函数只是提供一个声明,函数的实体是子类中的函数。