使用多态计算各种图形的面积。定义抽象基类Shape,其中声明纯虚函数calculateArea().从Shape派生出四个类:Rectangle(矩形)、Square(正方形)、Triangle(三角形)、Cricle(圆形)。定义通用函数calculate(可以多态计算各种图形的面积)。定义类Point表示坐标点,用来定位矩形,正方形,三角形以及圆形的圆心。(提示:为了计算方便,可以将Point声明为四个派生类的友元类
时间: 2023-06-26 14:04:00 浏览: 451
以下是实现多态计算各种图形面积的代码:
```cpp
#include<iostream>
using namespace std;
class Point{
friend class Rectangle;
friend class Square;
friend class Triangle;
friend class Circle;
private:
double x;
double y;
public:
Point(double a=0,double b=0):x(a),y(b){}
};
class Shape{
public:
virtual double calculateArea()=0;
};
class Rectangle:public Shape{
private:
Point p1,p2;
public:
Rectangle(Point a,Point b):p1(a),p2(b){}
double calculateArea(){
return (p2.x-p1.x)*(p2.y-p1.y);
}
};
class Square:public Shape{
private:
Point p;
double l;
public:
Square(Point a,double b):p(a),l(b){}
double calculateArea(){
return l*l;
}
};
class Triangle:public Shape{
private:
Point p1,p2,p3;
public:
Triangle(Point a,Point b,Point c):p1(a),p2(b),p3(c){}
double calculateArea(){
double a,b,c,p,s;
a=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
b=sqrt((p2.x-p3.x)*(p2.x-p3.x)+(p2.y-p3.y)*(p2.y-p3.y));
c=sqrt((p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p1.y-p3.y));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
};
class Circle:public Shape{
private:
Point p;
double r;
public:
Circle(Point a,double b):p(a),r(b){}
double calculateArea(){
return 3.1415926*r*r;
}
};
void calculate(Shape *p){
cout<<"The area is: "<<p->calculateArea()<<endl;
}
int main(){
Point p1(0,0);
Point p2(2,3);
Rectangle r(p1,p2);
calculate(&r);
Point p3(0,0);
Square s(p3,4);
calculate(&s);
Point p4(0,0);
Point p5(3,0);
Point p6(0,4);
Triangle t(p4,p5,p6);
calculate(&t);
Point p7(0,0);
Circle c(p7,5);
calculate(&c);
return 0;
}
```
在这个程序中,我们定义了一个抽象基类`Shape`,其中声明了一个纯虚函数`calculateArea()`,表示计算图形面积。从`Shape`派生出四个具体类:`Rectangle`(矩形)、`Square`(正方形)、`Triangle`(三角形)、`Circle`(圆形),并分别实现了它们的`calculateArea()`函数。
同时,我们也定义了一个类`Point`,表示坐标点,用来定位矩形、正方形、三角形以及圆形的圆心。为了计算方便,我们将`Point`声明为四个派生类的友元类。
最后,我们定义了一个通用函数`calculate()`,可以多态计算各种图形的面积。在`main()`函数中,我们分别创建了一个矩形、一个正方形、一个三角形和一个圆形,并通过`calculate()`函数计算它们的面积。
阅读全文