第4章运算符重载ppt课件.ppt
《第4章运算符重载ppt课件.ppt》由会员分享,可在线阅读,更多相关《第4章运算符重载ppt课件.ppt(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第四章第四章 运算符重载运算符重载C+面向对象程序设计C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分2本章主要内容本章主要内容4.1 什么是运算符重载什么是运算符重载4.2 运算符重载的方法运算符重载的方法4.3 重载运算符的规则重载运算符的规则4.4 运算符重载函数作运算符重载函数作为类成员函数和友元为类成员函数和友元函数函数4.5 重载双目运算符重载双目运算符4.6 重载单目运算符重载单目运算符4.7 重载流插入运算重载流插入运算符和流提取运算符符和流提取运算符4.8 不同类型数据间
2、不同类型数据间的转换的转换C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分3【目的要求】【目的要求】 1、掌握运算符重载的基础知识。 2、掌握运算符重载函数为类成员函数及友元函数的方法。3、熟悉不同类型数据间的转换。【重点】【重点】 运算符重载的方法;运算符重载函数作为类成员函数;运算符重载函数作为友元函数;单目运算符重载;不同类型数据之间的转换。【难点】【难点】 单目运算符重载函数;不同类型数据间的转换。C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而
3、完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分44.1 什么是运算符重载什么是运算符重载 函数的重载函数的重载 所谓函数的重载是指完成不同功能的函所谓函数的重载是指完成不同功能的函数可以具有相同的函数名。数可以具有相同的函数名。 C+的编译器是根据函数的实参来确定应的编译器是根据函数的实参来确定应该调用哪一个函数的。该调用哪一个函数的。 运算符重载运算符重载 就是赋予已有的运算符多重含义就是赋予已有的运算符多重含义。C+通通过重新定义运算符,使它能够用于特定过重新定义运算符,使它能够用于特定类的类的对象对象执行特定的功能执行特定的功能C+语言程序设计变电站电气主接线是指变电
4、站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分5例如:例如:“”是是右移运算符右移运算符,但在输入操作中又,但在输入操作中又是与流对象是与流对象cin配合使用的配合使用的流提取运算符流提取运算符。 因此,如果程序中用因此,如果程序中用“”作流作流插入运算符和流提取运算符,必须在本文件插入运算符和流提取运算符,必须在本文件模块中包含头文件模块中包含头文件iostream。 例例4.1 没有用运算符重载,通过函数来实现没有用运算符重载,通过函数来实现两个复数相加。两个复数相加。C+语言程序设计变电站电气主接线是指变电站的变压器、输电
5、线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分6#include using namespace std;class Complex public: Complex( )real=0;imag=0; /定义构造函数定义构造函数 Complex(double r,double i) real=r;imag=i; Complex complex_add( Complex &c2 ); void display( ); /声明输出函数声明输出函数 private: double real; /实部实部 double imag; /虚部虚部 ;C+语言
6、程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分7Complex Complex:complex_add(Complex &c2) Complex c; c.real=real+c2.real; /两个复数实部相加两个复数实部相加 c.imag=imag+c2.imag; /两个复数虚部相加两个复数虚部相加 return c; void Complex:display( ) /定义输出函数定义输出函数 cout(real,imagi)endl; C+语言程序设计变电站电气主接线是指变电站的变压器、输
7、电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分8int main( ) Complex c1(3,4),c2(5,-10),c3; c3=plex_add(c2); /调用复数相加函数调用复数相加函数 coutc1=; c1.display(); coutc2=; c2.display(); coutc1+c2=; c3.display(); return 0;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分9运算结果是正确的。但能否进行:
8、运算结果是正确的。但能否进行: c3=c1+c2; 的运算呢?的运算呢?4.2 运算符重载的方法运算符重载的方法 运算符重载的方法是运算符重载的方法是定义一个重载运算符的定义一个重载运算符的函数函数,在需要执行被重载的运算符时,系统,在需要执行被重载的运算符时,系统就自动调用该函数。即:就自动调用该函数。即:运算符重载实质上运算符重载实质上是函数的重载。是函数的重载。重载运算符的一般格式为:重载运算符的一般格式为:函数类型函数类型 operator 运算符名称运算符名称 (形参表列形参表列) 对运算符的重载处理对运算符的重载处理 C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样
9、与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分10例如:想将例如:想将“+”用于用于Complex类类(复数复数)的的加法运算,函数的原型可以是:加法运算,函数的原型可以是:Complex operator+ (Complex &c1,Complex &c2); 其中:其中: operator是关键字,是专门用于定义是关键字,是专门用于定义重载运算符的函数的;重载运算符的函数的;运算符名称就是运算符名称就是C+提供给用户的预下定义运算符。提供给用户的预下定义运算符。 注意:函数名是由注意:函数名是由operator和运算符组成,和运算符组成,即上面的即
10、上面的operator+ 就是函数名,意思就是函数名,意思是:对运算符是:对运算符+重载。重载。C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分11定义了重载运算符的函数后,可出说:函定义了重载运算符的函数后,可出说:函数数operator+重载了运算符重载了运算符+。如执行到如执行到复数相加:复数相加:c3=c2+c1;时,系统就会调;时,系统就会调用用operator+函数,把函数,把c1和和c2作为实参。作为实参。 怎样理解运算符重载函数?怎样理解运算符重载函数?对于普通函对于普通函数
11、,参数出现在圆括号内,而对于运算符重数,参数出现在圆括号内,而对于运算符重载函数,参数出现在其左、左两侧载函数,参数出现在其左、左两侧。 例例4.2 重载运算符重载运算符“+”,使之能用于两个复,使之能用于两个复数对象的相加。数对象的相加。C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分12#include using namespace std;class Complex public: Complex()real=0;imag=0; /默认构造函数默认构造函数(没有参数没有参数) Com
12、plex(double r,double i)real=r;imag=i; /构造函数重载构造函数重载(有两个参数有两个参数) Complex operator + (Complex &c2); /声明重载运算符声明重载运算符+的函数的函数 void display(); private: double real; double imag; ;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分13Complex Complex:operator + (Complex &c2) /定义重载运算符
13、定义重载运算符+的函数的函数 Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; void Complex:display()cout(real,imagi)endl;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分14int main( ) Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; /运算符运算符+用于复数运算用于复数运算 coutc1=;c1.display( ); coutc
14、2=;c2.display( ); coutreal +c2.real 将运算符重载为成员函数后,如出现含该运将运算符重载为成员函数后,如出现含该运算符的表达式,如:算符的表达式,如:c1+c2,编译系统把它解,编译系统把它解释为:释为:c1.oporator+(c2) 即通过对象即通过对象c1调用运算符重载函数,并以表调用运算符重载函数,并以表达式中第二个参数达式中第二个参数(c2)作为函数实参。作为函数实参。c1.realC+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分21例例4.3 将
15、运算符将运算符“+”重载为重载为Complex类的友元函数。类的友元函数。#include class Complexpublic: Complex( ) real=0 ; imag=0; Complex(double r,double i) real=r ; imag=i; friend Complex operator+ (Complex &c1, Complex &c2); /重载函数作为友元函数重载函数作为友元函数 void display( ); private: double real; double imag; ;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与
16、电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分22Complex operator+ (Complex &c1, Complex &c2) /定义作为友元函数的重载函数定义作为友元函数的重载函数 return Complex(c1.real+c2.real, c1.imag+c2.imag); void Complex:display( ) cout(real,“ imagi)endl;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分23int mai
17、n( ) Complex c1(3,4), c2(5,-10), c3; c3=c1+c2; coutc1=; c1.display( ); coutc2=; c2.display( ); coutc1+c2=; c3.display( ); return 0;此例与上例比较后区别如下:此例与上例比较后区别如下:(1)运算符重载函数是作为运算符重载函数是作为Complex的友元函数的友元函数C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分24(2)运算符重载函数有两个参数。即运算符重载函数有
18、两个参数。即c1+c2 解释为:解释为:operator+ (c1,c2) C+规定,有的运算符,如:规定,有的运算符,如:赋值运算符赋值运算符、下标运算符下标运算符、函数调用运算符函数调用运算符必须定义为类必须定义为类的成员函数;有的运算符只能定义为友元函的成员函数;有的运算符只能定义为友元函数,如:数,如:流插入流插入()运算符、运算符、类类型转换运算符。型转换运算符。 一般:将单目运算符重载为成员函数,将一般:将单目运算符重载为成员函数,将双目运算符重载为友元函数。双目运算符重载为友元函数。 说明:说明:VC6.0它提供的不带后缀它提供的不带后缀.h的头文的头文件不支持把成员函数重载为友
19、元函数。故头件不支持把成员函数重载为友元函数。故头文件采用文件采用#include C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分254.5 重载双目运算符重载双目运算符双目运算符又称二元运算符,是双目运算符又称二元运算符,是C+中最常用中最常用的运算符。双目运算符有两个操作数,通常的运算符。双目运算符有两个操作数,通常在运算符的左右两侧,如在运算符的左右两侧,如3+5,ab等。重载等。重载双目运算符,不言而喻在函数中应该有两个双目运算符,不言而喻在函数中应该有两个参数。参数。例:例:4.
20、4 定义一个字符串类定义一个字符串类String,用来存放,用来存放不定长的字符串,重载运算符不定长的字符串,重载运算符“=”、“”,用于两个字符串的等于、小于和大于,用于两个字符串的等于、小于和大于的比较运算。的比较运算。C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分26(1)先建立一个先建立一个String类:见类:见C4-4-1(VC+).CPP#include using namespace std;Class String /String 是用户自己指定的类名是用户自己指定的类名
21、public: String( ) p=NULL; /默认构造函数默认构造函数 String( char *str ); /构造函数构造函数 void display( ); private: char *p; /字符型指针,用于指向字符串字符型指针,用于指向字符串 ;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分27String:String( char *str ) /定义构造函数定义构造函数 p=str; /使使p指向实参字符串指向实参字符串void String:display(
22、) coutp; /输出输出p所指向的字符串所指向的字符串int main( ) String string1(Hello),string2(Book); string1.display(); coutendl; /换行换行 string2.display(); cout”运算符重载部分。运算符重载部分。C4-4-2(VC).CPP#include #include class String public: String( )p=NULL; String(char *str); /重载构造函数声明重载构造函数声明 friend bool operator(String &string1, St
23、ring &string2); /声明运算符函数为友元函数声明运算符函数为友元函数 void display( ); private: char *p; /字符型指针,用于指向字符串字符型指针,用于指向字符串 ;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分29String:String (char *str) p=str; void String:display( ) cout (String &string1,String &string2) if(strcmp(string1.p,s
24、tring2.p)0)return true; else return false; int main( ) String string1(Hello) , string2(Book); coutstring2)endl; return 0; C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分30(3)扩展到对扩展到对3个运算符重载。个运算符重载。 C4-4-3(VC).CPP#include #include class Stringpublic: String( )p=NULL; Stri
25、ng(char *str); friend bool operator(String &string1,String &string2); friend bool operator(String &string1,String &string2); friend bool operator=(String &string1, String &string2); void display(); private: char *p; ;C+语言程序设计变电站电气主接线是指变电站的变压器、输电线路怎样与电力系统相连接,从而完成输配电任务。变电站的主接线是电力系统接线组成中一个重要组成部分31Strin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运算 重载 ppt 课件
限制150内