C++操作符重载
作者:网络转载 发布时间:[ 2012/11/20 9:56:46 ] 推荐标签:
在主函数中测试如下:
#include<iostream>
#include<algorithm>
#include "Point.h"
using namespace std;
int main()
{
Point pt1(3,4);
Point pt2(4,5);
++pt1;
--pt2;
cout<<pt1.getX()<<pt1.getY()<<endl<<pt2.getX()<<pt2.getY()<<endl;
//cout<<(pt1==pt2)<<endl<<(pt1==pt1)<<endl<<(pt1!=pt2)<<endl;
return 0;
}
同时定义前缀式操作符与后缀式操作符存在一个问题:他们的形参数目和类型相同,普通重载不能区别所定义的是前缀式操作符还是后缀式操作符。
为了解决这一问题,后缀式操作符接受一个额外的int形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。尽管我们的前缀式操作符可以使用这个额外的形参,但通常不应该这样做。那个形参不是后缀式操作符的正常工作所需要的,它的作用是使后缀式函数与前缀式函数区别开。
在头文件中定义如下:
Point operator++(int);
Point operator--(int);
在源文件中实现:
Point Point::operator ++(int)
{
Point p(*this);
++*this;
return p;
}
Point Point::operator --(int)
{
Point p(*this);
--*this;
return p;
}
在主函数中测试成功:
#include<iostream>
#include<algorithm>
#include "Point.h"
using namespace std;
int main()
{
Point pt1(3,4);
Point pt2(4,5);
// ++pt1;
// --pt2;
//cout<<pt1.getX()<<pt1.getY()<<endl<<pt2.getX()<<pt2.getY()<<endl;
//cout<<(pt1==pt2)<<endl<<(pt1==pt1)<<endl<<(pt1!=pt2)<<endl;
Point pt3=pt1--;
cout<<pt3.getX()<<endl<<pt3.getY()<<endl;
return 0;
}
打印的是pt1自减之前的值。
注意:使用对象显式调用后缀式自减或自加时,应该传入一个参数:
Point pt;
pt.operator++(0); 这样是调用后缀式的操作。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11