当前位置:文档之家› 运算符重载

运算符重载

第7章 运算符重载
第7章运算符重载
本章学习要点
❖为什么要进行运算符重载 ❖运算符重载的方法 ❖重载运算符的规则 ❖运算符重载函数作为类成员函数和友元函数 ❖重载双目运算符 ❖重载单目运算符 ❖重载流插入运算符和流提取运算符 ❖不同类型数据间函数名多个含义。 ❖运算符重载是指同一个运算符可以施加于不同
但我们希望在程序中直接用运算符“+” 对Money类的对象进行相加运算。
total1 = cost1 + cost2;
对运算符“+” 进行重载以后,就可以 这样书写了。
7
7.1 为什么要进行运算符重载 ❖有了针对自定义类型数据的运算符重
载,不仅使我们编程时感到十分方便 ,而且写出的表达式与数学表达式很 相似,符合人们的习惯。
int main( ) { Money cost1(300, 5, 6),cost2(105, 7, 6), total1;
total1 = MonetAdd(cost1,cost2); total1.Display("total1 = cost1 + cost2"); return 0;} 5
class Money {public: Money(int y = 0, int j = 0, int f = 0) { yuan = y; jiao = j; fen = f; optimize( ); } void Display(string); Money MoneyAdd(Money &c2); private: int yuan, jiao, fen; void Optimize( );}; void Money::Optimize( ) { if ( fen >= 10 ){ jiao++; fen -=10; }
if ( jiao >= 10 ){ yuan++; jiao -=10; } }
void Money::Display(string str)
{ cout << str << " = " << yuan << "." << jiao << fen << "¥" <<
endl; } 4
class Money {public: Money(int y = 0, int j = 0, int f = 0) { yuan = y; jiao = j; fen = f; optimize( ); } void Display(string);
if ( jiao >= 10 ){ yuan++; jiao -=10; } } void Money::Display(string str) { cout << str << " = " << yuan << "." << jiao << fen << "¥" << endl; } Money MoneyAdd(Money &c1,Money &c2) { return Money( c1.yuan + c2.yuan, c1.jiao + c2.jiao, c1.fen + c2.fen ); }
if ( jiao >= 10 ){ yuan++; jiao -=10; } } void Money::Display(string str) { cout << str << " = " << yuan << "." << jiao << fen << "¥" << endl; } Money Money::MoneyAdd (Money &c2) { return Money ( yuan + c2.yuan, jiao + c2.jiao, fen + c2.fen ); }
9
7.2 运算符重载的方法 【例7-1】对“+”运算符进行重载来实现
两个Money类对象的加法运算。
10
#include <iostream>
int main( )
#include <string>
{ Money cost1(300, 5, 6), cost2(105, 7, 6),
using namespace std;
8
7.2 运算符重载的方法
函数名
❖重载运算符的函数的一般格式如下: 函数类型 operator运算符名称(形参列表) { 对运算符的重载处理 }
函数名是由operator和运算符组成,如 operator+意思是对运算符“+”重载。
重载运算符的函数可以是类的成员函数,也 可以是类的友元函数,还可以是既非类的成 员函数也非类的友元函数的普通函数
friend Money MoneyAdd(Money &c1,Money &c2); private: int yuan, jiao, fen; void Optimize( );}; void Money::Optimize( ) { if ( fen >= 10 ){ jiao++; fen -=10; }
int main( ) { Money cost1(300, 5, 6),cost2(105, 7, 6), total1;
total1 = cost1.MonetAdd(cost2); total1.Display("total1 = cost1 + cost2"); return 0;} 6
7.1 为什么要进行运算符重载
int yuan, jiao, fen; void Optimize( );//优化函数
Money cost2(5, 8, 2), total; total = cost1 + cost2;
};
void Money::Optimize( )
{ if ( fen >= 10 ){ jiao++; fen -=10; }
类型的操作数上面。
3
class Money
{public: Money(int y = 0, int j = 0, int f = 0)
构造函数
{ yuan = y; jiao = j; fen = f; optimize( ); }
void Display(string);
private:
Money cost1(10, 3, 5);
相关主题