虚函数的例子
虚函数与函数重载
虚函数可以在一个或多个派生类中被重新定义, 因此,属于函数重载的情况, 但这种重载与一般的函数重载是不同的,要求在 派生类中重新定义时,必须与基类中的函数原型 完全相同,包括函数名、返回类型、参数个数和 参数类型的顺序。这时无论在派生类的相应成员 函数前是否加上关键字virtual,都将视其为虚函 数,如果函数原型不同,只是函数名相同,C++将 视其为一般的函数重载,而不是虚函数。 只有类的成员函数才能声明为虚函数,全局函数 及静态成员函数不能声明为虚函数。
虚函数的几点说明
注意:
只有通过基类指针或引用间接指向派生类 子类型时,多态性才会起作用
当通过对象名调用成员函数时,只可能是 调用对象自身的成员,因此在通过一个对 象访问虚函数时采用静态联编
在调用中对虚函数使用成员名限定可以强 制C++对该函数使用静态联编
#include <iostream.h> class Rec:public Point class Point { { private: private: int len; int x; int width; int y; public: public: Rec(int a,int b,int l,int w):Point(a,b) Point(int a,int b) { len=l; { x=a; width=w; } y=b; } int area() virtual int area() { cout<<"\narea in dirived"<<endl; { cout<<"\narea return len*width; } in base"<<endl; }; return 0; }}; void disp(Point &rx,Point*px,Point x) { cout<<"reference area="<<rx.area()<<endl; cout<<"pointer area="<<px->area()<<endl; cout<<"object area="<<x.area()<<endl;} void main() { Rec rect(3,5,7,9); Rec *prect=▭ disp(rect,prect,rect);}