分别为正方形、矩形、三角形构建类Square、Rectangle、Triangle,分别包含各自的边长,用doulble型数据表示。每个类都至少包含4个函数成员,函数init用于设置图形的边长,函数perimeter用来计算图形的周长,函数area用来计算图形的面积,函数show用于显示图形的类别(方形、矩形或三角形)、周长和面积。编程分别显示一个方形、一个矩形、一个三角形的周长和面积。思考并回答,能否将3个类合并成一个类,如果能,怎么做?如果不能,为什么?
时间: 2023-12-06 18:44:17 浏览: 178
下面是三个类的代码实现:
```C++
#include<iostream>
#include<cmath>
using namespace std;
class Square {
private:
double side;
public:
void init(double s) {
side = s;
}
double perimeter() {
return 4 * side;
}
double area() {
return side * side;
}
void show() {
cout << "This is a square." << endl;
cout << "Perimeter is: " << perimeter() << endl;
cout << "Area is: " << area() << endl;
}
};
class Rectangle {
private:
double length, width;
public:
void init(double l, double w) {
length = l;
width = w;
}
double perimeter() {
return 2 * (length + width);
}
double area() {
return length * width;
}
void show() {
cout << "This is a rectangle." << endl;
cout << "Perimeter is: " << perimeter() << endl;
cout << "Area is: " << area() << endl;
}
};
class Triangle {
private:
double a, b, c;
public:
void init(double aa, double bb, double cc) {
a = aa;
b = bb;
c = cc;
}
double perimeter() {
return a + b + c;
}
double area() {
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
void show() {
cout << "This is a triangle." << endl;
cout << "Perimeter is: " << perimeter() << endl;
cout << "Area is: " << area() << endl;
}
};
int main() {
Square s;
s.init(5);
s.show();
Rectangle r;
r.init(3, 4);
r.show();
Triangle t;
t.init(3, 4, 5);
t.show();
return 0;
}
```
如果想将三个类合并成一个类,可以考虑用一个枚举类型成员变量来表示三个形状的类型,并用一个共同的init函数初始化相应的边长。但是由于三个形状的计算周长和计算面积的方式不同,所以计算周长和面积的函数不能共用,因此无法将三个类合并成一个类。
阅读全文