在很多的情况下,在基类中一般都不能给出虚函数的具体而有意义的定义,这时我们就可以将它说明为纯虚函数。它的具体的定义由它的派生类具体完成,这样可以使类之间的结构更加清晰,同时也更容易理解。
含有纯虚函数的类叫抽象类。
说明纯虚函数的一般格式:
class 类名
{
virtual 返回值类型 函数名(参数列表)=0;
}
#ifndef _______Shape__
#define _______Shape__
#include <iostream>
class Shape
{
private:
int x;
int y;
public:
void setX(int _x,int _y);
int getX();
int getY();
virtual float area()=0;//纯虚函数。
};
#endif /* defined(_______Shape__) */
#include "Shape.h"
void Shape::setX(int _x, int _y)
{
x=_x;
y=_y;
}
int Shape::getX()
{
return x;
}
int Shape::getY()
{
return y;
}
#ifndef _______Rectangle__
#define _______Rectangle__
#include <iostream>
#include "Shape.h"
class Rectangle :public Shape
{
private:
int width;
int height;
public:
void setWH(int _w,int _h);
int getWidth();
int getHeigth();
float area();
};
#endif /* defined(_______Rectangle__) */
#include "Rectangle.h"
void Rectangle::setWH(int _w, int _h)
{
width=_w;
height=_h;
}
int Rectangle:: getWidth()
{
return width;
}
int Rectangle::getHeigth()
{
return height;
}
float Rectangle:: area()
{
return width*height;
}
#include <iostream>
#include "Rectangle.h"
#include "Shape.h"
using namespace std;
int main(int argc, const char * argv[])
{
Shape *p;
Rectangle rect;
rect.setWH(10, 20);
p=▭//加上virtual,基类可以调用派生类的函数。
cout<<p->area()<<endl;//调用派生类的函数,实现多态5