源程序:
#include <iostream>
using namespace std;
//shape类中有纯虚函数,所以shape类是抽象类,抽象类定义的对象
//也是抽象的,只能用指针对象,不能用普通对象,更不能用普通对象实例化
class shape
{
public:
virtual double area()=0; //抽象类中至少有一个纯虚函数
virtual double area1() //虚函数必须要定义return 0;
{
return 0;
}
};
class square:public shape //派生类为正方形
{
protected:
double H;
public:
square(double l) //构造函数
{
H=l;
}
double area() //实例化基类的纯虚函数
{
return H*H;
}
};
class circle:public square //派生类为圆
{
public:
circle(double r):square(r)
{}
double area() //实例化基类中的纯虚函数area()
{
return 3.14159*H*H; //返回圆的面积
}
};
class triangle:public square
{
protected:
double W;
public:
triangle(double h,double w):square(h)
{
W=w; //构造函数的参数初始化保护形变量W
}
double area() //实例化纯虚函数area()
{
return H*W*0.5;
}
};
class rectangle:public triangle //派生类是长方形
{
public:
rectangle(double h,double w):triangle(h,w)
{}
double area() //实例化基类中的纯虚函数
{
return H*W;
}
};
double total(shape *s[],int n) //求各图形面积之和
{
double sum=0.0;
for(int i=0;i<n;i++)
sum=sum+s[i]->area();
return sum;
}
int main() //主函数
{
shape *s[4]; //定义对象指针数组,数组的每一个元素对应一个图形
s[0]=new square(4);
s[1]=new triangle(3,6);
s[2]=new rectangle(3,6);
s[3]=new circle(4); //以上4个图形
for(int i=0;i<4;i++)
{
cout<<"s["<<i<<"]="<<s[i]->area()<<endl; //输出每个图形的面积
}
double sum=total(s,4); //计算4个图形面积之和
cout<<"The total area is:"<<sum<<endl;
return 1;
}
运行结果: