编写一个程序:定义一个矩形类,同时能实现输入矩形的宽度和高度,输出其面积和周长。 要求: 1、程序能对输入的非法数据进行相应的处理。 2、类中要有构造函数、拷贝构造函数、析构函数 3、将上学期的知识(内联、带默认形参值、重载)融入到类中
时间: 2023-12-18 07:04:44 浏览: 94
u10316005_taAssign2_normal:编写一个测试程序,包含三种几何图形来计算面积和周长
好的,以下是实现上述要求的C++代码:
```c++
#include <iostream>
using namespace std;
class Rectangle {
private:
double width, height;
public:
Rectangle(double w = 0, double h = 0) : width(w), height(h) {
if (width <= 0 || height <= 0) {
cout << "Invalid width or height!" << endl;
width = 0;
height = 0;
}
}
Rectangle(const Rectangle& other) {
width = other.width;
height = other.height;
}
~Rectangle() {
cout << "Rectangle object destroyed!" << endl;
}
double GetWidth() const {
return width;
}
double GetHeight() const {
return height;
}
double GetArea() const {
return width * height;
}
double GetPerimeter() const {
return 2 * (width + height);
}
void SetWidth(double w) {
if (w > 0) {
width = w;
} else {
cout << "Invalid width!" << endl;
}
}
void SetHeight(double h) {
if (h > 0) {
height = h;
} else {
cout << "Invalid height!" << endl;
}
}
Rectangle& operator=(const Rectangle& other) {
width = other.width;
height = other.height;
return *this;
}
bool operator==(const Rectangle& other) const {
return width == other.width && height == other.height;
}
friend istream& operator>>(istream& in, Rectangle& rect) {
double w, h;
in >> w >> h;
rect.SetWidth(w);
rect.SetHeight(h);
return in;
}
friend ostream& operator<<(ostream& out, const Rectangle& rect) {
out << "Width: " << rect.width << endl;
out << "Height: " << rect.height << endl;
out << "Area: " << rect.GetArea() << endl;
out << "Perimeter: " << rect.GetPerimeter() << endl;
return out;
}
};
int main() {
Rectangle r1;
cout << "Please enter the width and height of the rectangle: ";
cin >> r1;
cout << r1 << endl;
Rectangle r2(3, 4);
cout << r2 << endl;
Rectangle r3 = r2;
cout << r3 << endl;
Rectangle r4;
r4 = r3;
cout << r4 << endl;
cout << "Is r2 equal to r3? " << (r2 == r3 ? "Yes" : "No") << endl;
return 0;
}
```
在该程序中,我们定义了一个 `Rectangle` 类,包含了宽度 `width`、高度 `height` 两个数据成员,以及一个构造函数、一个拷贝构造函数、一个析构函数和一些成员函数。
在构造函数中,我们对输入的非法数据进行了处理,将宽度和高度设置为 0。在拷贝构造函数中,我们将一个 `Rectangle` 对象的数据成员复制到另一个 `Rectangle` 对象中。
在成员函数中,我们定义了获取宽度、高度、面积和周长的函数 `GetWidth()`、`GetHeight()`、`GetArea()` 和 `GetPerimeter()`,以及设置宽度和高度的函数 `SetWidth()` 和 `SetHeight()`。我们还重载了赋值运算符 `operator=` 和相等运算符 `operator==`,用于复制和比较两个 `Rectangle` 对象。
在类外,我们还重载了输入运算符 `operator>>` 和输出运算符 `operator<<`,用于输入和输出 `Rectangle` 对象。
在 `main()` 函数中,我们创建了四个 `Rectangle` 对象,分别使用默认构造函数、参数构造函数、拷贝构造函数和赋值运算符进行初始化,并使用输入运算符和输出运算符进行输入和输出。最后,我们还比较了两个 `Rectangle` 对象是否相等。
阅读全文