建立一个几何形状Shape类,并设计成抽象类,类中无数据成员,只有纯虚函数getArea()求面积,getLen()求周长,display()显示类中数据的信息;设计出三角形子类Tri类:属性是三边的边长,接口成员有:构造函数Tri();重载的构造函数Tri(float a, float b, float );getArea()求面积,getLen()求周长,display()显示基本数据成员,setSides(float a, float b, float c)设置三边;长方形子类:属性有长和宽,接口成员有:构造函数Rect();重载的构造函数Rect(float height, float width);getArea()求面积,getLen()求周长,display()显示基本数据成员,setSides(float height, float width)设置两边;在主程序中动态创建一个三角形对象和一个长方形对象,并赋予父类接口,然后通过多态的方法得到动态产生对象的周长和面积,并显示这个对象的基本信息
时间: 2023-06-06 08:08:53 浏览: 88
好的,我可以回答这个问题。以下是代码示例:
```
#include<iostream>
using namespace std;
// 定义抽象类Shape
class Shape
{
public:
virtual float getArea() = 0; // 纯虚函数,求面积
virtual float getLen() = 0; // 纯虚函数,求周长
virtual void display() = 0; // 纯虚函数,显示类中数据的信息
};
// 定义三角形子类Tri
class Tri : public Shape
{
public:
Tri() {} // 构造函数
Tri(float a, float b, float c) { setSides(a, b, c); } // 重载的构造函数
void setSides(float a, float b, float c) { side1 = a; side2 = b; side3 = c; } // 设置三边
virtual float getArea() { // 求面积
float p = (side1 + side2 + side3) / 2.0;
return sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
virtual float getLen() { // 求周长
return side1 + side2 + side3;
}
virtual void display() { // 显示基本数据成员
cout << "三角形:边长为" << side1 << ", " << side2 << ", " << side3 << endl;
cout << "周长为:" << getLen() << endl;
cout << "面积为:" << getArea() << endl;
}
private:
float side1, side2, side3; // 三边的边长
};
// 定义长方形子类Rect
class Rect : public Shape
{
public:
Rect() {} // 构造函数
Rect(float height, float width) { setSides(height, width); } // 重载的构造函数
void setSides(float height, float width) { height_ = height; width_ = width; } // 设置两边
virtual float getArea() { // 求面积
return height_ * width_;
}
virtual float getLen() { // 求周长
return 2 * (height_ + width_);
}
virtual void display() { // 显示基本数据成员
cout << "长方形:长为" << height_ << ", 宽为" << width_ << endl;
cout << "周长为:" << getLen() << endl;
cout << "面积为:" << getArea() << endl;
}
private:
float height_, width_; // 长和宽
};
int main()
{
// 动态创建三角形和长方形对象
Shape* pShape1 = new Tri(3.0, 4.0, 5.0);
Shape* pShape2 = new Rect(3.0, 4.0);
// 多态调用各对象的接口
pShape1->display();
pShape2->display();
// 释放对象
delete pShape1;
delete pShape2;
return 0;
}
```
输出:
```
三角形:边长为3, 4, 5
周长为:12
面积为:6
长方形:长为3, 宽为4
周长为:14
面积为:12
```
阅读全文