C++_运算符重载_各类详细介绍.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C_运算符重载_各类详细介绍

第7章 运算符重载 本章主要内容 7.1 引入运算符重载的原因及运算符重载的规则 7.2 运算符重载函数的两种形式 7.3 几种常用运算符的重载 7.4 类型转换 本章重点 几种常用运算符的重载与类型转换 本章难点 单目运算符“++”与“—”的重载 本章所需学时: 4学时 §7.1 运算符重载概述 引入运算符重载的原因 例如:int a=1,b=2;float c=1.1,d=2.4; int e=a+b; float f=c+d; float g=f+e; 为什么同一个运算符“+”可以用于完成不同类型的数据的加运算呢?原来C++语言针对预定义数据类型已经对某些运算符做了适当的重载。 C++语言提供的预定义数据类型终究是有限的,我们在解决多种多样的实际问题 时,往往需要使用许多的自定义数据类型。例如,在解决科学与工程计算问题时,往往要使用复数、矩阵等。 下面定义一个简化的复数类complex class complex{ public: double real,imag; complex(double r=0,double i=0) {real=r,imag=i;} main(){ complex com1(1.1,2.2),com2(3.3,4.4),total; total=com1+com2; //错误 //… return 0; } 错误原因在于complex类类型不是预定义的基本数据类型,而是用户自定义的数据类型。C++知道如何相加两个int数据,或相加两个float型数据,甚至知道如何把一个int型数据与一个float型数据相加,但是C++并不知道怎样将两个complex类类型的对象进行相加,这样需要我们来重载“+”运算符来解决两对象相加的问题 运算符重载的定义格式: 函数类型 operator @[运算符](形参表) { 函数体; } 在编译时遇到operator@的运算符函数,就检查传递给函数的参数的类型。如果编译器在一个运算符的两边有自定义的数据类型。就执行用户自己的函数,而不是内部运算符的常规程序。 那么上例中的错误,就是需要重载重载+运算符,其运算符函数operator+()如下: complex operator+(complex com1,complex com2) { complex temp; temp.real=com1.real+com2.real; temp.real=com1.imag+com2.imag; return temp; } 其中主函数的 total=com1+com2;(隐式调用) 语句也可以写成: total=operator+(com1,com2); (显式调用) 从中可以看出运算符重载进一步提高了面向对象软件系统的灵活性、可扩充性和可读性 运算符重载的规则 重载运算符与预定义运算符的使用方法完全相同,被重载的运算符不改变原来的操作数个数、优先级和结合性。 重载的运算符只能是运算符集中的运算符,不能另创新的运算符。 运算符的含义可以改变,但最好不改变。如实数的加法运算可以用乘法运算符来实现 在C++中,大多数系统预定义运算符可以把被重载,但也有些运算符不能被重载如:类属关系运算符“.”、成员指针运算符“*”、作用域分辨符“::”、sizeof运算符和 三目运算符“?:” 不能改变运算符对预定义类型的操作方式 §7.2 运算符重载两种形式 运算符重载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先C++语言中代表另一种含义,但他们彼此之间并不冲突。C++会根据运算符中的操作数来辨别应使用哪一种功能进行运算。在类外定义运算符重载函数,只能对类公有数据成员进行操作。实际上,运算符的重载有两种形式:定义为类的类友元函数;定义为它将要操作的类的成员函数。前者称为友元运算符函数,后者为成员运算符函数。 友元运算符函数 概念 友元运算符函数定义的语法形式 声明 friend type operator@(形数表); 定义 type operator@(形数表) { //函数体} 其中,type(函数类型)指定了重载运算符的返回值类型,operator是定义运算符重载函数的关键词,@(运算符)给定了要重载的运算符名称,是C++中可重载的运算符,形参表中给出重载运算符所需要的参数和类型 由于友元运算符函数不是类的成员函数,所以没有this指针。如果重载的运算符函数是双目的运算符,则参数表中有两个操作数,若为单目运算符,则参数表中有一个操作数 双目运算符重载 当用友元函数重载双目运算符时,两个操作数都要传递给运算符函数。 一般

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档