9-7设计一个基类 Shape。该类包含3个属性:图形名称( name)、图形面积( area)和图形周长(perimeter)。该类包含3个成员函数:calArea()-计算并返回该图形的面积;calP-erimeter( )-计算并返回该图形的周长;display( )-打印输出图形名称、面积、周长。设计3个派生类: Rectangle Triangle Cirdle ,请为派生类定义合适的数据成员用于表达其结构,派生类应重载实现基类中的全部成员函数。
时间: 2024-02-15 07:01:36 浏览: 29
好的,以下是基类 Shape 和三个派生类 Rectangle、Triangle、Circle 的实现代码:
```c++
#include <iostream>
using namespace std;
class Shape {
protected:
string name;
double area;
double perimeter;
public:
virtual double calArea() = 0;
virtual double calPerimeter() = 0;
virtual void display() = 0;
};
class Rectangle : public Shape {
protected:
double width;
double height;
public:
Rectangle(double w, double h) {
name = "Rectangle";
width = w;
height = h;
area = calArea();
perimeter = calPerimeter();
}
double calArea() {
return width * height;
}
double calPerimeter() {
return 2 * (width + height);
}
void display() {
cout << "Name: " << name << endl;
cout << "Width: " << width << endl;
cout << "Height: " << height << endl;
cout << "Area: " << area << endl;
cout << "Perimeter: " << perimeter << endl;
}
};
class Triangle : public Shape {
protected:
double a;
double b;
double c;
public:
Triangle(double a, double b, double c) {
name = "Triangle";
this->a = a;
this->b = b;
this->c = c;
area = calArea();
perimeter = calPerimeter();
}
double calArea() {
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
double calPerimeter() {
return a + b + c;
}
void display() {
cout << "Name: " << name << endl;
cout << "Side 1: " << a << endl;
cout << "Side 2: " << b << endl;
cout << "Side 3: " << c << endl;
cout << "Area: " << area << endl;
cout << "Perimeter: " << perimeter << endl;
}
};
class Circle : public Shape {
protected:
double radius;
public:
Circle(double r) {
name = "Circle";
radius = r;
area = calArea();
perimeter = calPerimeter();
}
double calArea() {
return 3.14 * radius * radius;
}
double calPerimeter() {
return 2 * 3.14 * radius;
}
void display() {
cout << "Name: " << name << endl;
cout << "Radius: " << radius << endl;
cout << "Area: " << area << endl;
cout << "Perimeter: " << perimeter << endl;
}
};
int main() {
Shape *s[3];
s[0] = new Rectangle(5, 10);
s[1] = new Triangle(3, 4, 5);
s[2] = new Circle(2);
for (int i = 0; i < 3; i++) {
s[i]->display();
cout << endl;
}
return 0;
}
```
以上代码实现了基类 Shape 和三个派生类 Rectangle、Triangle、Circle,每个派生类都重载了基类中的三个成员函数 calArea()、calPerimeter() 和 display()。在 main 函数中,创建了一个 Shape 类型的指针数组,分别指向 Rectangle、Triangle、Circle 的对象,然后调用 display() 函数输出每个对象的信息。