欢迎来到天天文库
浏览记录
ID:20515991
大小:130.50 KB
页数:20页
时间:2018-10-13
《第11讲 运算符重载和string类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十一讲运算符重载和string类第十一讲运算符重载运算符重载的概念运算符重载的方式:重载为类的成员函数重载为类的友元函数运算符重载的限制string类构造函数成员函数运算符C++语言程序设计2引例案例分析定义表示复数的类Complex,包括完成两个复数相加的成员函数Add。(cw1101)运算符重载#includeclassComplex{private:doubler;//实部doublei;//虚部public:Complex(doublex=0.0,doubley=0.0){r=x;i=y;}ComplexAdd(constCom
2、plex&c);voidPrint();};3引例案例分析续运算符重载ComplexComplex::Add(constComplex&c){Complext;t.r=r+c.r;t.i=i+c.i;returnt;}voidComplex::Print(){cout<<"("<3、型。5运算符重载运算符的重载与函数重载的方法一致,是一种特殊的函数重载。在类中可以使用两种方法对运算符进行重载:重载为类的成员函数重载为类的友元函数运算符重载6运算符重载运算符重载为类的成员函数语法格式operator是关键字。@是要被重载的运算符。operator@共同组成该运算符函数的名称。X是需要重载该运算符的类。TYPE是该运算符函数的返回值类型。运算符重载TYPEX::operator@(形参表){//重新定义运算符@在类X中的功能}7运算符重载案例分析:运算符重载为类的成员函数在Complex类中定义重载运算符+的函数。(cw1102)运算符重载#i4、ncludeclassComplex{private:doubler;//实部doublei;//虚部public:Complexoperator+(constComplex&c);Complexoperator+(doubled);……};8运算符重载案例分析:运算符重载为类的成员函数续运算符重载ComplexComplex::operator+(constComplex&c){Complext;t.r=r+c.r;t.i=i+c.i;returnt;}ComplexComplex::operator+(doubled){Complex5、t;t.r=r+d;t.i=i;returnt;}9运算符重载案例分析:运算符重载为类的成员函数续运算符重载voidmain(){Complexa(3.0,4.0),b(10.5,20.5),c,d,e;c=a.Add(b);d=a+b;e=a+10.5;d=a.operator+(b);e=a.operator+(10.5);c.Print();d.Print();e.Print();}运算符左侧的对象是调用对象,右侧的对象是函数参数。Complexoperator+(constComplex&c);Complexoperator+(doubled);但是,表6、达式10.5+a是不正确的!10运算符重载运算符重载为类的友元函数语法格式对于双目运算符,形参表中有两个参数。对于单目运算符,形参表中有一个参数。案例分析:运算符重载为类的友元函数在Complex中定义友元函数重载运算符+。(cw1103)运算符重载friendTYPEoperator@(形参表);classComplex{public:friendComplexoperator+(doubled,constComplex&c);……};11运算符重载案例分析:运算符重载为类的友元函数续运算符重载Complexoperator+(doubled,constCom7、plex&c){Complext;t.r=d+c.r;t.i=c.i;returnt;}voidmain(){Complexa(3.0,4.0),b(10.5,20.5),c,d,e;e=10.5+a;……}12运算符重载运算符重载的限制大部分C++运算符可以被重载,除了下面的运算符:“.”、“.*”、“::”、“?:”等不能定义新的运算符。例如,operator**()。运算符的重载既不会改变原运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。当重载为类的成员函数时,运算符重载函数的形参个数要比运算符操作数个数少一个;若重载为友元函数,则参数个数与8、操作数个数相同。下面的运
3、型。5运算符重载运算符的重载与函数重载的方法一致,是一种特殊的函数重载。在类中可以使用两种方法对运算符进行重载:重载为类的成员函数重载为类的友元函数运算符重载6运算符重载运算符重载为类的成员函数语法格式operator是关键字。@是要被重载的运算符。operator@共同组成该运算符函数的名称。X是需要重载该运算符的类。TYPE是该运算符函数的返回值类型。运算符重载TYPEX::operator@(形参表){//重新定义运算符@在类X中的功能}7运算符重载案例分析:运算符重载为类的成员函数在Complex类中定义重载运算符+的函数。(cw1102)运算符重载#i
4、ncludeclassComplex{private:doubler;//实部doublei;//虚部public:Complexoperator+(constComplex&c);Complexoperator+(doubled);……};8运算符重载案例分析:运算符重载为类的成员函数续运算符重载ComplexComplex::operator+(constComplex&c){Complext;t.r=r+c.r;t.i=i+c.i;returnt;}ComplexComplex::operator+(doubled){Complex
5、t;t.r=r+d;t.i=i;returnt;}9运算符重载案例分析:运算符重载为类的成员函数续运算符重载voidmain(){Complexa(3.0,4.0),b(10.5,20.5),c,d,e;c=a.Add(b);d=a+b;e=a+10.5;d=a.operator+(b);e=a.operator+(10.5);c.Print();d.Print();e.Print();}运算符左侧的对象是调用对象,右侧的对象是函数参数。Complexoperator+(constComplex&c);Complexoperator+(doubled);但是,表
6、达式10.5+a是不正确的!10运算符重载运算符重载为类的友元函数语法格式对于双目运算符,形参表中有两个参数。对于单目运算符,形参表中有一个参数。案例分析:运算符重载为类的友元函数在Complex中定义友元函数重载运算符+。(cw1103)运算符重载friendTYPEoperator@(形参表);classComplex{public:friendComplexoperator+(doubled,constComplex&c);……};11运算符重载案例分析:运算符重载为类的友元函数续运算符重载Complexoperator+(doubled,constCom
7、plex&c){Complext;t.r=d+c.r;t.i=c.i;returnt;}voidmain(){Complexa(3.0,4.0),b(10.5,20.5),c,d,e;e=10.5+a;……}12运算符重载运算符重载的限制大部分C++运算符可以被重载,除了下面的运算符:“.”、“.*”、“::”、“?:”等不能定义新的运算符。例如,operator**()。运算符的重载既不会改变原运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。当重载为类的成员函数时,运算符重载函数的形参个数要比运算符操作数个数少一个;若重载为友元函数,则参数个数与
8、操作数个数相同。下面的运
此文档下载收益归作者所有