预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共50页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第九章运算符重载本章主要内容9.1运算符重载概述注意:运算符重载的实质就是函数重载,在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的.运算符重载的规则与限制: (1)可以重载C++中除下列运算符外的所有运算符:..*::?: (2)只能重载C++语言中已有的运算符,不可臆造新的。 (3)不改变原运算符的优先级和结合性。 (4)不能改变操作数个数。 (5)经重载的运算符,其操作数中至少应该有一个是自定义类型。 运算符重载有两种形式: (1)重载为类成员函数。一般形式为: 函数类型operator运算符(形参表) { 函数体; } 参数个数=原操作数个数-1(后置++、--除外) (2)重载为友元函数。一般格式为: friend函数类型operator运算符(形参表) { 函数体; } 参数个数=原操作数个数,且至少应该有一个自定义类型的形参。例复数类运算符重载//取复数的实部和虚部 doublereal(){returnrealpart;} doubleimag(){returnimagpart;} //算术运算符重载为成员函数 Complexoperator+(constComplex&); Complexoperator-(constComplex&); Complexoperator*(constComplex&); Complexoperator/(constComplex&); //赋值运算符重载为成员函数 Complex&operator=(constComplex&);//关系运算符重载为成员函数 booloperator==(constComplex&); booloperator!=(constComplex&); voidDisplay();//显示复数 private: doublerealpart; doubleimagpart; }; #endif 这个复数类定义了复数的+、-、*、/、==、!=等各项操作。 //算术运算符重载为友元函数 friendComplexoperator+(constComplex&,constComplex&); friendComplexoperator-(constComplex&,constComplex&); …… 对于成员函数,一元运算符的参数为0;二元运算符的参数个数为1,如复数类中的==运算符,参数个数为2。对于友元函数,参数的个数与操作数个数相同。 9.2重载单目运算符后置单目运算符++和-- 如果要重载++或--为类成员函数,使之能够实现表达式oprd++或oprd--,其中oprd为A类对象,则++或--应被重载为A类的成员函数,且具有一个int类型形参。 经重载后,表达式oprd++相当于oprd.operator++(0)例#include<iostream.h> classClock //时钟类声明 { public: //外部接口 Clock(intNewH=0,intNewM=0,intNewS=0); voidShowTime(); voidoperator++();//前置单目运算符重载 voidoperator++(int);//后置单目运算符重载 private: //私有数据成员 intHour,Minute,Second; };voidClock::operator++() //前置单目运算符重载函数 { Second++; if(Second>=60) {Second=Second-60; Minute++; if(Minute>=60) { Minute=Minute-60; Hour++; Hour=Hour%24; } } cout<<"++Clock:"; }voidClock::operator++(int)//后置单目运算符重载 { Second++; if(Second>=60) { Second=Second-60; Minute++; if(Minute>=60) { Minute=Minute-60; Hour++; Hour=Hour%24; } } cout<<"Clock++:"; }//其它成员函数的实现略 voidmain() { ClockmyClock(23,59,59); cout<<"Firsttimeoutput:"; myClock.ShowTime(); myClock++; myClock.ShowTime(); ++myClock; myClock.ShowTime(