一.前言
如上
二.内容
编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们之和。要求用基类指针数组,使它每一个元素指向一个派生类对象。
三.代码
#include<iostream>
using namespace std;
class Shape{//抽象类Shape
public:
virtual double area() const=0;//求面积
};
class Circle:public Shape{//公用派生类
public:
Circle(double r);//构造函数
virtual double area()const;//求圆的面积
private:
double radius;//半径
};
Circle::Circle(double r){//构造函数
radius=r;
}
double Circle:: area()const{//求圆的面积
return 3.14159*radius*radius;
}
class Rectangle:public Shape{//公用派生类Rectangle
public:
Rectangle(double a,double b);//构造函数
virtual double area()const;//求矩形的面积
private:
double x;//矩形的长
double y;//矩形的宽
};
Rectangle::Rectangle(double a,double b){//构造函数
x=a;
y=b;
}
double Rectangle:: area()const{//求矩形的面积
return x*y;
}
class Triangle:public Shape{//公用派生类Triangle
public:
Triangle(double w,double h);//构造函数
virtual double area()const;//求三角形的面积
private://三角形的三边
double width;//宽
double height;//高
};
Triangle::Triangle(double w,double h){//构造函数
width=w;
height=h;
}
double Triangle:: area()const{//求三角形的面积
return width*height/2;
}
class Square:public Shape{//公用派生类Square
public:
Square(double a1);//构造函数
virtual double area()const;//求正方形的面积
private:
double a;//边长
};
Square::Square(double a1):a(a1){//构造函数
}
double Square::area()const{//求正方形的面积
return a*a;
}
class Trapezoid:public Shape{//公用派生类Trapezoid梯形
public:
Trapezoid(double t1,double u1,double h);//构造函数
virtual double area()const;//求梯形的面积
private:
double t;//上底
double u;//下底
double height;//高
};
Trapezoid::Trapezoid(double t1,double u1,double h){//构造函数
t=t1;
u=u1;
height=h;
}
double Trapezoid::area()const{//求梯形的面积
return (t+u)*height/2;
}
int main(){
Circle c(12.6);
Square s(3.5);
Rectangle r(4.5,8.4);
Trapezoid t(2.0,4.5,3.2);
Triangle t1(4.5,8.4);
Shape* shapes[5]={
&c,&s,&r,&t,&t1
};
double sum=0;//图形面积和
int i;//循环变量
for(i=0;i<5;i++){
sum=sum+shapes[i]->area() ;
}
cout<<"总面积:"<<sum<<endl;
return 0;
}