欢迎来到天天文库
浏览记录
ID:15180668
大小:145.00 KB
页数:21页
时间:2018-08-01
《第8章 运算符重载》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第八章操作符重载重载是C++多态性的体现之一。当定义新的数据类型之后,C++原有操作符提供的操作在语义往往不能满足对新的数据类型的对象进行操作,因此必须对C++原有操作符的操作语义进行扩充,这就是重载的应用需求背景。8.1操作符重载概述当在同一作用域内声明两个或多个相同的名字(即标识符)时,称该名字被重载。在同一作用域内的两个声明,如果声明的名字相同但是数据类型不同,则称这两个声明为重载声明。C++规定,只有函数声明可以被重载,对象声明或类型声明不允许重载。换言之,C++的这一规定将重载严格限制在函数范畴。当重载的函数被调用时,从诸个可调用的重载函数
2、(viablefunctions)中究竟调用那一个函数则由调用时实参的类型与函数声明时形参的类型相比较结果的一致性决定。这个选择与决定的过程称为重载解析。在C++中,根据函数的定义者是谁可以将函数分为两类。一类是由程序员定义的函数,它们往往被称为用户自定义函数,另一类则是系统提供的函数。就系统提供的函数而言,根据它们的调用方式,又可以进一步分为两类。一类是与用户自定义函数调用方式相同的系统函数,它们往往称为库函数或类库中的成员函数;另一类则沿用自然语言和数学语言的使用习惯,在各类表达式中完成相应的运算,它们往往称为操作符或运算符,但实际上是系统的预定
3、义函数或操作符函数。例如对整型对象x、y,x+y实际表示对预定义函数‘+’的调用。x和y是预定义函数‘+’的参数,但一般习惯上称为‘+’的左操作数和右操作数。由于操作符实际上也是函数,不同的只在于操作符是系统的预定义函数,因此操作符和用户自定义函数一样也可以重载。以加法操作‘+’为例,C++提供的‘+’操作如果不考虑类库支持,则只能进行整数或实数的加法运算,若考虑类库支持则能够进行一般复数的运算。如果用复数来表示电路中的电流和电压,根据电路理论,只有电流和电流才能进行相加减的运算;同理,只有电压和电压才能进行相加减的运算。因此,为了将复数用于电路计算
4、,可以象下面的例子那样设计一个用于电路计算的复数类,并且对加法操作的语义进行扩充。例8-1设计一个能够用于电路计算的复数类,并重载加法操作。#include"iostream.h"structcomplex{complex(doublere=0.0,doubleim=0.0,charch1='U');complexoperator+(complex&c);//声明重载加法操作voidshow();private:doublereal,imag;charch;};complex::complex(doublere,doubleim,charch1){r
5、eal=re;imag=im;ch=ch1;cout<<"constructoriscalled!"<6、ow(){cout<=0)cout<7、!constructoriscalled!//return语句中通过构造函数实现类型转换I=4.2-6.9i程序在complex类中声明了一个字符数据成员ch,并且对加法运算进行了重载。C++规定,当进行操作符重载时,要在操作符前面冠以关键字operator。因此在对‘+’进行重载时就用了operator+作为加法操作的函数调用符。重载后的加法操作要求参与相加的两个对象的ch成员值相同时才允许进行加法操作,否则认为出错。编译器将表达式c2+c3的理解成为c2.operator+(c3)。事实上,用c2.operator+(c3)代替c2+c3是完全可8、以的。成员函数show输出对象究竟是电流还是电压的信息,并且按照a+bi或a-bi的形式输出复数值。对程序的
6、ow(){cout<=0)cout<7、!constructoriscalled!//return语句中通过构造函数实现类型转换I=4.2-6.9i程序在complex类中声明了一个字符数据成员ch,并且对加法运算进行了重载。C++规定,当进行操作符重载时,要在操作符前面冠以关键字operator。因此在对‘+’进行重载时就用了operator+作为加法操作的函数调用符。重载后的加法操作要求参与相加的两个对象的ch成员值相同时才允许进行加法操作,否则认为出错。编译器将表达式c2+c3的理解成为c2.operator+(c3)。事实上,用c2.operator+(c3)代替c2+c3是完全可8、以的。成员函数show输出对象究竟是电流还是电压的信息,并且按照a+bi或a-bi的形式输出复数值。对程序的
7、!constructoriscalled!//return语句中通过构造函数实现类型转换I=4.2-6.9i程序在complex类中声明了一个字符数据成员ch,并且对加法运算进行了重载。C++规定,当进行操作符重载时,要在操作符前面冠以关键字operator。因此在对‘+’进行重载时就用了operator+作为加法操作的函数调用符。重载后的加法操作要求参与相加的两个对象的ch成员值相同时才允许进行加法操作,否则认为出错。编译器将表达式c2+c3的理解成为c2.operator+(c3)。事实上,用c2.operator+(c3)代替c2+c3是完全可
8、以的。成员函数show输出对象究竟是电流还是电压的信息,并且按照a+bi或a-bi的形式输出复数值。对程序的
此文档下载收益归作者所有