虚函数的作用在于运行的时候能够正确的识别调用函数的对象是那个类的,然后正确的调用对应的函数
如果对象是基类的对象,调用的就是基类的函数,如果对象是派生类的,就调用派生类的同名函数
class
Base {
public
:
virtual
void
fun() {
puts
(
"Base::fun()"
);
}
};
class
D1 :
public
Base {
public
:
void
fun() {
puts
(
"D1::fun()"
);
}
};
class
D2 :
public
Base {
public
:
void
fun() {
puts
(
"D2::fun()"
);
}
};
int
main() {
Base *ptr;
Base b;
D1 d1;
D2 d2;
ptr = &b;
ptr->fun();
// "Base::fun()"
ptr = &d1;
ptr->fun();
// "D1::fun()"
ptr = &d2;
ptr->fun();
// "D2::fun()"
}