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