可以重载的运算符:
不可以被重载的运算符:
运算符重载规则:
基本形式:返回值类型 operator被重载的运算符(...)
例子:
const Integer Integer::operator+(const Integer& that); //重载Integer类内的+运算 你可以把“operator+”看成一个函数名 const Integer operator+(const Integer& r, const Integer& l); //重载两个Integer相加的全局函数
class Integer //完成例子 { public: Integer(int n= 0):i(n) { }; const Integer operator+(const Integer& n) const { return Integer(i + n.i); } ... private: int i; };
好,我们Integer类对“+”运算符进行了重载,那么我们就来用一下:
Integer x(1),y(5),z(0); z=x+y; //正确 z=x+3; //正确 z=3+y; //错误
第一种是重载的常规用法,z=x+y ===> z=x.operator+(y);当编译器看到“+”时就会去左值“x”里找下有没有对“+”的重载操作,找到后就调用重载的函数将表达式变为“z=x.operator+(y)”
第二种,看到“+”后找左值,左值为x对象,其中对“+”进行了重载,然后右值为整数3,首先把整数3转换为Integer对象后再进行 z=x.operator+(Integer(3))
第三种,左值为3,显然不能将y这个对象转换为int,所以编译器报错
那么问题来了,我们想让第三种也可以重载,怎么做呢,看下边的代码:
class Integer { friend const Integer operator+ ( const Integer& lhs, const Integer& rhs); //将全局函数声明为Integer类的友元,便于访问类内的成员函数 ... } const Integer operator+(const Integer& lhs, const Integer& ths) { return Integer(lhs.i + rhs.i); //访问类内成员函数 } z=3+y; //正确
c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
原文:https://www.cnblogs.com/go-ahead-wsg/p/12122352.html