用C++写出解决下列问题的代码,设计一个图形基类:Shape,在此基础上派生Rectangle、Circle、Triangle 类。 1、Cirlce 类基本信息:圆心坐标、半径; Rectangle 类基本信息:长、宽; Triangle 类基本信息:三个顶点坐标; 其中:成员变量为 private 属性,成员函数为public 属性; 2、每个图形类有多个构造函数:缺省构造函数、带参数的构造函数; 3、每个图形类有计算图形的面积GetArea(),显示图形的基本信息函数Show(),修改基 本信息的函数Set(形参)。 [实验提示] 1、在派生类的构造函数中,应注意对基类数据成员的初始化; 2、各类图形面积的计算方法不同, 因此不能在基类 Shape 中统一确定计算的方法。在 基类Shape 中实现计算面积功能的函数体GetArea()应为空,在派生类中根据同名覆盖原则 定义各自的同名函数实现具体功能
时间: 2024-03-24 13:41:19 浏览: 184
c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)
好的,以下是代码实现:
```c++
#include<iostream>
using namespace std;
class Shape{
protected:
double area; //面积
public:
Shape(){ area=0; }
virtual double GetArea() = 0; //纯虚函数
virtual void Show() = 0;
virtual void Set() = 0;
};
class Circle:public Shape{
private:
double x, y, r; //圆心坐标和半径
public:
Circle(){ x=0; y=0; r=0; }
Circle(double x_, double y_, double r_){ x=x_; y=y_; r=r_; }
double GetArea(){ return 3.14*r*r; }
void Show(){
cout<<"圆心坐标为("<<x<<","<<y<<"),半径为"<<r<<endl;
cout<<"面积为"<<GetArea()<<endl;
}
void Set(){
cout<<"请输入圆心坐标x、y和半径r:";
cin>>x>>y>>r;
}
};
class Rectangle:public Shape{
private:
double length, width; //长和宽
public:
Rectangle(){ length=0; width=0; }
Rectangle(double l, double w){ length=l; width=w; }
double GetArea(){ return length*width; }
void Show(){
cout<<"长为"<<length<<",宽为"<<width<<endl;
cout<<"面积为"<<GetArea()<<endl;
}
void Set(){
cout<<"请输入长和宽:";
cin>>length>>width;
}
};
class Triangle:public Shape{
private:
double x1, y1, x2, y2, x3, y3; //三个顶点坐标
public:
Triangle(){ x1=0; y1=0; x2=0; y2=0; x3=0; y3=0; }
Triangle(double x1_, double y1_, double x2_, double y2_, double x3_, double y3_){
x1=x1_; y1=y1_; x2=x2_; y2=y2_; x3=x3_; y3=y3_;
}
double GetArea(){ return abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2; }
void Show(){
cout<<"三个顶点坐标为("<<x1<<","<<y1<<"),("<<x2<<","<<y2<<"),("<<x3<<","<<y3<<")"<<endl;
cout<<"面积为"<<GetArea()<<endl;
}
void Set(){
cout<<"请输入三个顶点坐标:";
cin>>x1>>y1>>x2>>y2>>x3>>y3;
}
};
int main(){
Circle c1(1,2,3);
c1.Show();
c1.Set();
c1.Show();
Rectangle r1(4,5);
r1.Show();
r1.Set();
r1.Show();
Triangle t1(0,0,0,3,4,0);
t1.Show();
t1.Set();
t1.Show();
return 0;
}
```
在这个代码中,我们首先定义了一个抽象基类 Shape,其中包含了一个纯虚函数 GetArea(),表示求图形面积的方法。接着,我们分别定义了三个派生类 Circle、Rectangle 和 Triangle,分别表示圆、矩形和三角形。这三个类中均包含了成员变量和成员函数,并且都重载了基类中的三个方法:GetArea()、Show() 和 Set(),以实现自己的计算面积、显示基本信息和修改基本信息的功能。
最后,我们在主函数中创建了三个对象:Circle c1、Rectangle r1 和 Triangle t1,分别使用了不同的构造函数初始化它们的成员变量,并分别调用了它们的 Show() 和 Set() 方法,以展示它们的基本信息并修改它们的成员变量。
阅读全文