定义一个公共基类Shape,它表示一个封闭平面几何图形。然后,从Shape类派生出三角形类Trianglet、矩形类Rectangle和圆类Circle,在基类中定义纯虚函数show()和area(),分别用于显示图形信息和求相应图形的面积,并在派生类中根据不同的图形实现相应的函数。要求实现运行时的多态性。 数据要求: Trianglet:3条边 Rectangle:长和宽 Circle:半径
时间: 2024-03-07 13:47:52 浏览: 88
声明一个图形基类并在它的基础上派生出其他类并编写程序实现各类的定义及实现
好的,这是一个经典的面向对象编程问题,下面是我给出的代码实现:
```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()函数,输出了三角形、矩形和圆的信息和面积。
阅读全文