一.前言
如上
二.内容
编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea输出以上三者的面积,3个图形的数据在定义对象时给定。
三.代码
#include<iostream>
#include<math.h>
using namespace std;
class Shape{//抽象类Shape
public:
virtual void printArea()=0;//显示面积
};
class Circle:public Shape{//公用派生类
public:
Circle(double r);//构造函数
virtual void printArea();//显示圆的面积
private:
double radius;//半径
};
Circle::Circle(double r){//构造函数
radius=r;
}
void Circle:: printArea(){//显示圆的面积
cout<<3.14159*radius*radius<<endl;;
}
class Rectangle:public Shape{//公用派生类Rectangle
public:
Rectangle(double a,double b);//构造函数
virtual void printArea();//显示矩形的面积
private:
double x;//矩形的长
double y;//矩形的宽
};
Rectangle::Rectangle(double a,double b){//构造函数
x=a;
y=b;
}
void Rectangle:: printArea(){//显示矩形的面积
cout<<x*y<<endl;;
}
class Triangle:public Shape{//公用派生类Triangle
public:
Triangle(double a1,double b1,double c1);//构造函数
virtual void printArea();//显示矩形的面积
private://三角形的三边
double a;
double b;
double c;
};
Triangle::Triangle(double a1,double b1,double c1){//构造函数
a=a1;
b=b1;
c=c1;
}
void Triangle:: printArea(){//显示矩形的面积
double p;
p=(a+b+c)/2;
cout<<sqrt(p*(p-a)*(p-b)*(p-c))<<endl;
}
int main(){
Shape *s;
Circle c(12.6);
Rectangle r(4.5,8.4);
Triangle t(3,4,5);
s=&c;
cout<<"area of circle:";
s->printArea();
s=&r;
cout<<"area of rectangle:";
s->printArea() ;
s=&t;
cout<<"area of triangle:";
s->printArea() ;
return 0;
}