Shape类是一个表示形状的抽象类,用此抽象类派生出子类:圆类(Circle)、正方形类(Square),并且圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。
现在使用抽象类派生出两个子类,并用求面积函数求得两个子类的面积总和!!
#include <iostream>
using namespace std;
class Shape //抽象类
{
public:
virtual double area()=0; //纯虚函数
};
class Circle:public Shape //从抽象类Shape 公有继承而来生成子类Circle
{
public:
Circle(double r){this->radius=r;} //构造函数,用this指针初始化radius
void set() //新增的设置圆类半径的函数
{
cout<<"Please input the value of the circle:"<<endl;
cin>>radius;
}
void show() //新增的显示半径函数
{
cout<<"the radius of the circle="<<radius<<endl;
}
double area() //求圆面积的函数
{return 3.14159*radius*radius;}
private:
double radius;//新增数据radius
};
class Square:public Shape //从抽象类Shape 公有继承而来生成子类Square
{
public:
Square(double a){this->a=a;} //构造函数
void set() //新增设置方形边长函数
{
cout<<"Please input the value of a:"<<endl;
cin>>a;
}
void show() //显示正方形边长
{
cout<<"a="<<a<<endl;
}
double area(){return a*a;} //求正方形的面积
private:
double a; //新增边长数据
};
double total(Shape *s[ ], int n) //一个通用的用以求不同形状的图形面积总和的函数
{
double sum=0.0;
for(int i=0;i<n;i++)
sum+=s[i]->area( );
return sum;
}
int main()
{
Circle C(5.5);
C.show();
Square S(9.9);
S.show();
Shape *s[]={&C,&S};
cout<<"total="<<total(s,2)<<endl;
return 0;
}
纯虚函数在原基类中并无定义,因此在派生类中必须给出相应的函数体定义。