定义一个公共基类Shape,它表示一个封闭平面几何图形。然后,从Shape类派生出三角形类Trianglet、矩形类Rectangle和圆类Circle,在基类中定义纯虚函数show()和area(),分别用于显示图形信息和求相应图形的面积,并在派生类中根据不同的图形实现相应的函数。要求实现运行时的多态性。 数据要求: Trianglet:3条边 Rectangle:长和宽 Circle:半径
时间: 2024-03-07 19:47:52 浏览: 98
好的,这是一个经典的面向对象编程问题,下面是我给出的代码实现:
```c++
#include<iostream>
using namespace std;
class Shape{
public:
virtual void show()=0; // 纯虚函数,用于显示图形信息
virtual double area()=0; // 纯虚函数,用于求相应图形的面积
};
class Triangle:public Shape{
private:
double a,b,c;
public:
Triangle(double x,double y,double z):a(x),b(y),c(z){} // 构造函数
void show(){
cout<<"这是一个三角形,三边长分别为:"<<a<<" "<<b<<" "<<c<<endl;
}
double area(){
double p=(a+b+c)/2; // 计算半周长
return sqrt(p*(p-a)*(p-b)*(p-c)); // 使用海伦公式计算三角形面积
}
};
class Rectangle:public Shape{
private:
double length,width;
public:
Rectangle(double x,double y):length(x),width(y){} // 构造函数
void show(){
cout<<"这是一个矩形,长为:"<<length<<" 宽为:"<<width<<endl;
}
double area(){
return length*width; // 计算矩形面积
}
};
class Circle:public Shape{
private:
double r;
public:
Circle(double x):r(x){} // 构造函数
void show(){
cout<<"这是一个圆,半径为:"<<r<<endl;
}
double area(){
return 3.1415926535*r*r; // 计算圆的面积
}
};
int main(){
Shape *p;
Triangle t(3,4,5);
Rectangle r(5,6);
Circle c(7);
p=&t; // 通过基类指针指向派生类对象,实现多态性
p->show();
cout<<"面积为:"<<p->area()<<endl;
p=&r;
p->show();
cout<<"面积为:"<<p->area()<<endl;
p=&c;
p->show();
cout<<"面积为:"<<p->area()<<endl;
return 0;
}
```
这个程序定义了一个公共基类Shape,其中包含纯虚函数show()和area(),分别用于显示图形信息和求相应图形的面积。然后派生出三个类Triangle、Rectangle和Circle,它们分别表示三角形、矩形和圆。这三个类都实现了基类Shape中定义的纯虚函数,具体的实现方式根据不同的图形而不同。在main函数中,我们定义了一个基类指针p,并通过它来实现多态性,即通过一个基类指针可以指向不同的派生类对象。最后,我们调用了show()和area()函数,输出了三角形、矩形和圆的信息和面积。
阅读全文