YTU 2384:矩形类中运算符重载【C++】

http://202.194.119.110/problem.php?id=2384
Time Limit:1 Sec Memory Limit:128MB

题目描述

定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数、输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数。要求使用提示中给出的测试函数并不得改动。
  两个矩形相加的规则是:决定矩形的对应坐标分别相加,如
    左下角(1,2),右上角(3,4)的矩形,与
    左下角(2,3),右上角(4,5)的矩形相加,得到的矩形是
    左下角(3,5),右上角(7,9)的矩形。
  这个规则没有几何意义,就这么定义好了。
  输出面积的功能通过重载"<<"运算完成。
  本题可以在2383的基础上扩展完成。

输入

测试函数中第一个矩形直接初始化,第二个矩形通过键盘输入。输入四个数,分别表示第二个矩形左下角和右上角顶点的坐标,如输入2.5 1.8 4.3 2.5,代表左下角坐标为(2.5, 1.8),右上角坐标为(4.3, 2.5)。

输出

输出两点相加后得到的点的面积。运行测试函数时,p1的顶点是1 1 6 3,如果输入的p2是2.5 1.8 4.3 2.5,计算得到的矩形p3的左下角坐标为(3.5, 2.8),右上角坐标为(10.3, 5.5),输出为p3的面积18.36。

样例输入

2.5 1.8 4.3 2.5

样例输出

18.36

提示

int main()

{

    Rectangle p1(1,1,6,3),p2,p3;

    p2.input();

    p3=p1+p2;

    cout<<p3;

    return 0;

}


提交时请加上主函数。

题解

吐个槽,学校机房的电脑上还是老旧的vc++6.0,重载输出<<运算符的时候各种奇奇怪怪的报错烦的不行,折腾下来还没法支持,只好自己在vscode上做出来了。

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

class Rectangle
{
protected:
  double p1x,p1y,p2x,p2y;

public:
  Rectangle()
  {
    p1x = 0;
    p1y = 0;
    p2x = 0;
    p2y = 0;
  }

  Rectangle(double _p1x,double _p1y,double _p2x,double _p2y)
  {
    p1x = _p1x;
    p1y = _p1y;
    p2x = _p2x;
    p2y = _p2y;
  }

  void input();
    Rectangle operator+(Rectangle p1);

    friend ostream &operator<<(ostream &out, Rectangle &r);
    //输入输出重载必须作为全局函数,而不能作为类内声明的函数,所以在类内声明重载函数的时候需要使用友元函数的形式。
};

void Rectangle::input()
{
    cin >> p1x >> p1y >> p2x >> p2y;
}

Rectangle Rectangle::operator+(Rectangle p1)
{
    Rectangle p2(p1.p1x + p1x, p1.p1y + p1y, p1.p2x + p2x, p1.p2y + p2y);
    return p2;
}

ostream &operator<<(ostream &out, Rectangle &r) //全局函数,矩形类需要加&符号
{
    out << (r.p2x - r.p1x) * (r.p2y - r.p1y) << endl;
    //调试的时候后面不加endl会输出百分号(%),奇葩...
    return out;
}

int main()
{
    Rectangle p1(1,1,6,3),p2,p3;
    p2.input();
    p3 = p1 + p2;
    cout << p3;
    return 0;
}

参考资料

1.VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法
https://wenku.baidu.com/view/1fd2436aa300a6c30d229f35.html
2.c++输入重载&输出重载
https://blog.csdn.net/Cracked_hitter/article/details/79343203