虚函数——函数的多态性

--虚函数:在基类的函数声明前加关键字virtual表明该函数是一个虚函数,当派生类重新定义此函数的功能时,应保证函数的声明高度一致,否则会被编译器误认为是重载函数,并不需要再加关键字。当派生类的对象调用该函数时,先看该虚函数有没有在该派生类中实现,有则调用,无则调用基类中的函数定义:

class shape{

protected:

double x,y;

public:

shape(double xx,double yy):x(xx),y(yy);

virtual double area() const {return 0.0;}     //在基类中定义了一个计算面积的虚函数

};

class rectangle:public shape{

protected:

double w,h;

public:

rectangle(double xx,double yy,double ww,double hh):shape(xx,yy),w(ww),h(hh);

double area() const {return w*h;}        //area()虚函数的实现,声明和基类中的完全一致

}

...

shape a;

rectangle b;

那么a.area()=0.0,而b.area()=b.w*b.h;


虚析构函数

如果派生类新增了指针对象,指向了动态申请的内存,那么必须定义虚构函数来释放这块内存空间。如果根类的析构函数是虚构函数,所有派生类的析构函数都将是虚函数。


纯虚函数

格式:virtual double area()const =0;这样就不用为虚类写一个无用的函数体。一个类含有纯虚函数就可以被称为抽象类。


猜你喜欢

转载自blog.csdn.net/wm64195135/article/details/39801407