实现方式一:成员函数 运算符重载可以通过成员函数实现 ●运算符重载为成员函数时,形参个数少一个: 目的对象自动作为第一个操作数/左操作数 ●如果是单目运算,无需形参(后置+和后置--除外) 优点:可以自由访问本类的数据成员 若是双目运算,则左操作数就是目的对象本身 若是单目运算,则目的对象就是操作数,不需要其它对象 http://math.ecnu.edu.cn/~jypan 7
http://math.ecnu.edu.cn/~jypan 7 实现方式一:成员函数 运算符重载可以通过成员函数实现 运算符重载为成员函数时,形参个数少一个: 目的对象自动作为第一个操作数/左操作数 如果是单目运算,无需形参(后置 ++ 和后置 -- 除外) ►优点:可以自由访问本类的数据成员 ►若是双目运算,则左操作数就是目的对象本身 ►若是单目运算,则目的对象就是操作数,不需要其它对象
例:有理数的加法 ex12_overload_member_01.cpp class Rational public: Rational(){x=0;y=1; Rational(int x,int y){this->x=x;this->y=y; Rational operator+(const Rational p); private: int x,yi }; RationalRational:operator+(const Rational&p) int newx x*p.yy*p.x; int newy y*p.y; return Rational(newx,newy); http://math.ecnu.edu.cn/~jypan 8
http://math.ecnu.edu.cn/~jypan 8 例:有理数的加法 class Rational { public: Rational() { x=0; y=1; } Rational(int x, int y) { this->x=x; this->y=y; } Rational operator+(const Rational & p); private: int x, y; }; Rational Rational::operator+(const Rational & p) { int newx = x*p.y + y*p.x; int newy = y*p.y; return Rational(newx, newy); } ex12_overload_member_01.cpp
实现方式一:成员函数(续》 口双目运算符的重载(成员函数) 对象AO对象B 类型说明符operator⊙(const类名&); 声明 类型说明符类名:operator⊙(const类名&p) →定义 {函数体;} (假定在类外部定义) 注意:只有一个形参(对象) http://math.ecnu.edu.cn/~jypan 9
http://math.ecnu.edu.cn/~jypan 9 实现方式一:成员函数(续) 双目运算符的重载(成员函数) 声明 定义 类型说明符 operator⊙(const 类名 &); 对象A ⊙ 对象B 类型说明符 类名::operator⊙(const 类名 & p) { 函数体; } (假定在类外部定义) † 注意:只有一个形参(对象)