设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。操作为计算矩形周长与面积。类对象的数据由友元函数来进行访问,并对比友元函数、成员函数和普通函数使用上的不同。
#include <iostream> using namespace std; class Rectangle { public: Rectangle(int x1, int y1, int x2, int y2) : x1_(x1), y1_(y1), x2_(x2), y2_(y2) {} // 成员函数计算周长 int getPerimeter() const { return 2 * (abs(x2_ - x1_) + abs(y2_ - y1_)); } // 成员函数计算面积 int getArea() const { return abs(x2_ - x1_) * abs(y2_ - y1_); } // 友元函数访问对象数据 friend void printRectangleData(const Rectangle& rect); private: int x1_, y1_, x2_, y2_; }; // 友元函数实现 void printRectangleData(const Rectangle& rect) { cout << "矩形的左下角坐标: (" << rect.x1_ << ", " << rect.y1_ << ")" << endl; cout << "矩形的右上角坐标: (" << rect.x2_ << ", " << rect.y2_ << ")" << endl; cout << "矩形的周长: " << rect.getPerimeter() << endl; cout << "矩形的面积: " << rect.getArea() << endl; } int main() { int a, b, c, d; cin >> a >> b >> c >> d; Rectangle rect(a,b,c,d); printRectangleData(rect); return 0; }
我们使用成员函数`getPerimeter()`和`getArea()`来计算矩形的周长和面积。我们还创建了一个友元函数`printRectangleData()`来访问矩形类的对象数据。通过比较,我们可以看到友元函数可以直接访问对象的私有成员,而成员函数和普通函数需要通过对象调用才能访问对象的私有成员。