一、为什么要运算符重载
1.原因:对于自定义的运算符(类类型的数据类型......)
2.实现:付给同一个函数多个函数名多个含义
3.简单的实现运算符重载:
#include<iostream>
#include<string>
using namespace std;
class Money
{
public:
Money(int y = 0 ,int jiao = 0,int f = 0);
Money operator+(Money&);
void Display(string );
private:
int yuan;
int jiao;
int fen;
void optimize();
};
void Money::optimize()
{
jiao += fen /10 ;
yuan += jiao /10 ;
fen %= 10;
jiao %= 10;
}
Money Money ::operator+(Money&c2)
{
return(yuan + c2.yuan,jiao + c2.jiao,fen + c2.fen );
}
void Money::Display(string str)
{
cout << str << "=" << yuan <<"." << jiao <<fen << endl;
}
Money ::Money(int y, int j ,int f)
{
yuan = y;
jiao = j;
fen = f;
cout << " 已经调用了含参构造函数!!!" << endl;
optimize();
}
int main()
{
Money cost1( 300,10,15),cost2(55,6,9),total_1,total_2;
total_1 = cost1 + cost2;
total_2 = cost1.operator+(cost2);
total_1.Display("total_1 = cost1 + cost2");
total_2.Display("total_2 = cost1 + cost2");
return 0;
}
结果:
解释:
对于该运算符(类与类之间的相加----即自定义的数据类型),编译器无法识别,编译器只可以识别常见的数据类型相加(如:int a = 2 + 3 等),所以要实现运算符的重载,必须要对相关的运算符进行重载。
二、注意
1.下面的运算符不可以进行重载
如: . --- 成员访问运算符、 sizeof --- 长度运算符 、 . * --- 成员指针运算符、 ?: ---- 条件运算符、 :: --- 域运算符、
2.运算符重载不可以改变(4个方面)
如:不可以改变运算符的操作数的个数、不可以改变原有运算符的优先级、不可以改变运算符的语法结构、不可以改变运算符的结合性。