设计并测试一个矩形类属性为矩形的左下与右上角的坐标矩形水平放置操作为设计矩形周长与面积类对象的数据,由友元函数来进行访问,并对比友元函数,成员函数和普通函数使用上的区别
时间: 2023-05-29 18:02:15 浏览: 162
以下是一个C++的矩形类的实现代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Rectangle;
class Measure {
public:
void displayMeasure(Rectangle &rect);
private:
double perimeter;
double area;
};
class Rectangle {
public:
Rectangle(double x1, double y1, double x2, double y2);
double getX1() const { return x1; }
double getY1() const { return y1; }
double getX2() const { return x2; }
double getY2() const { return y2; }
friend void displayMeasure(Rectangle &rect);
private:
double x1, y1, x2, y2;
};
Rectangle::Rectangle(double x1, double y1, double x2, double y2) {
this->x1 = x1;
this->y1 = y1;
this->x2 = x2;
this->y2 = y2;
}
void Measure::displayMeasure(Rectangle &rect) {
double length = abs(rect.getX2() - rect.getX1());
double width = abs(rect.getY2() - rect.getY1());
perimeter = 2 * (length + width);
area = length * width;
cout << "The perimeter of the rectangle is " << perimeter << endl;
cout << "The area of the rectangle is " << area << endl;
}
void displayMeasure(Rectangle &rect) {
double length = abs(rect.x2 - rect.x1);
double width = abs(rect.y2 - rect.y1);
double perimeter = 2 * (length + width);
double area = length * width;
cout << "The perimeter of the rectangle is " << perimeter << endl;
cout << "The area of the rectangle is " << area << endl;
}
int main() {
Rectangle rect(0, 0, 3, 4);
Measure measure;
displayMeasure(rect);
measure.displayMeasure(rect);
return 0;
}
```
在这个例子中,我们定义了一个Rectangle类,表示一个矩形。这个矩形有四个属性,分别是左下角的x坐标,左下角的y坐标,右上角的x坐标和右上角的y坐标。我们还定义了一个Measure类,表示矩形的周长和面积。这个类有两个私有属性,分别是周长和面积。该类还有一个公有方法,`displayMeasure`,用于计算并输出矩形的周长和面积。
Notice:以上代码未符合PEP8标准及未完成重构
友元函数`displayMeasure`可以直接访问`Rectangle`类的私有属性。这是因为我们在矩形类中将其声明为友元函数。另外,我们也定义了一个普通函数`displayMeasure`,它也可以访问`Rectangle`类的私有属性,但是它不能像友元函数那样直接访问,而是需要通过参数传递。在这个例子中,我们比较了友元函数,成员函数和普通函数的使用上的区别。
阅读全文