1.设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。要求用友元函数、友元成员和友元类三种方法实现。
时间: 2024-05-05 07:18:10 浏览: 224
好的,您可以提出问题。对于您的第一个问题,我理解了您的要求,以下是代码实现:
```cpp
#include<iostream>
using namespace std;
class Point{
public:
Point(int _x=0, int _y=0):x(_x), y(_y){}
int getX() const{return x;}
int getY() const{return y;}
private:
int x, y;
};
class Rectangle{
public:
Rectangle(Point _lt, Point _rb):
left_top(_lt), right_bottom(_rb){}
int getArea() const; // 计算矩形面积
friend int getAreaFriend(Rectangle r); // 友元函数实现
class FriendClass; // 友元类实现
friend class FriendClass;
private:
Point left_top, right_bottom;
};
int Rectangle::getArea() const{
int length = right_bottom.getX() - left_top.getX();
int width = right_bottom.getY() - left_top.getY();
return length*width;
}
int getAreaFriend(Rectangle r){
int length = r.right_bottom.getX() - r.left_top.getX();
int width = r.right_bottom.getY() - r.left_top.getY();
return length*width;
}
class Rectangle::FriendClass{
public:
int getArea(Rectangle r){
int length = r.right_bottom.getX() - r.left_top.getX();
int width = r.right_bottom.getY() - r.left_top.getY();
return length*width;
}
};
int main(){
Rectangle r(Point(0,0), Point(3,4));
cout << "矩形面积:" << r.getArea() << endl; //成员函数实现
cout << "矩形面积(友元函数):" << getAreaFriend(r) << endl; // 友元函数实现
Rectangle::FriendClass fc;
cout << "矩形面积(友元类):" << fc.getArea(r) << endl; // 友元类实现
return 0;
}
```
以上代码中,定义了 `Point` 类表示矩形的两个点坐标, `Rectangle` 类表示矩形,通过点的坐标计算矩形的面积。为了实现友元函数、友元成员、友元类三种方法,使用了三个不同的函数来计算矩形面积。其中,友元函数可以直接访问类的私有成员,友元成员需要在类中声明并在类外实现,友元类需要在 `Rectangle` 类中声明,并在类的外部实现,可以访问类中的私有成员。在主函数中,通过不同的方式计算矩形的面积,并输出结果。
阅读全文