一个简单的运算符重载:+
用于计算钱的加减(简单不严谨):
#include<iostream> using namespace std; class money { public: money(int y,int j) { yuan=y;jiao=j;} friend money operator+(money m1,money m2); void show() { cout<<yuan<<"."<<jiao<<endl; } private: int yuan; int jiao; }; money operator+(money m1,money m2) { int y=m1.yuan+m2.yuan; int j=m1.jiao+m2.jiao; for(;j>9;j=j-10)y++; money m(y,j); return m;} int main() { money m1(10,2);money m2(5,9);money c=m1+m2; c.show(); }
可以把函数改为如下形式,即把重载函数放在类的里面,此时减少一个参数:
二元运算符用成员重载时,只需要一个参数,另一个参数由this指针传入
那为什么可以用this指针直接传入呢?
首先我们明确一点,成员函数是有this指针的,如果上面的声明定义改成友元函数是没有问题的,友元没有this指针。当运算符重载时,此时会有this指针帮助用户进行获取对象的信息,而不需要显性指明对象。 简单来说,就是当重载运算符函数的形参列表中有两个且第一个为当前对象类型时,第一个形参需要省略 ,this指针指向了第一个对象。
#include<iostream> using namespace std; class money { public: money(int y,int j) { yuan=y;jiao=j;} //friend money operator+(money m1,money m2); void show() { cout<<yuan<<"."<<jiao<<endl; } money operator+(money m2) { int y=yuan+m2.yuan;//----------------this指针的存在 int j=jiao+m2.jiao;//---------------this----- for(;j>9;j=j-10)y++; money m(y,j); return m;} private: int yuan; int jiao; }; /*money operator+(money m1,money m2) { int y=m1.yuan+m2.yuan; int j=m1.jiao+m2.jiao; for(;j>9;j=j-10)y++; money m(y,j); return m;}*/ int main() { money m1(10,2);money m2(5,9);money c=m1+m2; c.show(); }