第九章 运算符的重载及流类库.ppt

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

第九章 运算符重载及流类库 主讲:冯传胜 Email:fcs@ 9.1 运算符重载 9.1.1 重载对象的赋值运算符 9.1.2 运算符重载的实质 9.1.3 ,和++运算符重载实例 9.1.4 类运算符和友元运算符的区别 9.1.5 下标运算符“[]”的重载 9.2 流类库 9.2.1 流类库的基础类 9.2.2 默认输入输出格式控制 9.2.3 使用ios_base类 9.3 文件流 9.3.1 使用文件流 9.3.2 几个典型成员函数 9.3.3 文件存取综合实例 9.1 运算符重载 9.1.1 重载对象的赋值运算符 编译器在默认情况下为每个类生成一个默认的赋值操作,用于同类的两个对象之间相互赋值。其默认含义为逐个为成员赋值,即将一个对象的成员值赋给另一个对象相应的成员。 这种默认赋值在有些类中可能是不正确的。 如,假设类str的数据成员为“char *st”,即 由于存在“s1=s2;”语句,s1中的st指向world,也就是说s1.st和s2.st指向内存中的同一块区域。这样当s1和s2的生存期结束时,会被析构,而会导致同一块内存被释放两次,从而出现错误。 此时,成员函数必须使用引用参数。 C++中的关键字“operator”和运算符一起使用就表示一个运算符函数,上面方法中的“赋值操作”可以用“operator=”来表示。 应将“operator=”从整体上视为一个函数名。上述函数的声明为: str operator=(str); 在类体外定义时为: str str::operator=(str a){…//函数休} 当str类定义了赋值运算符函数后,“operator=”是类的成员函数名,对象s1调用这个成员函数(参数为s2)的形式为: s1.operator=(s2); 上述调用是成员函数正规的调用方法,系统允许直接写成如下形式: s1=s2; 被C++编译器解释为 s1.operator=(s2); 由于函数返回一个引用,所以可以连用,即: s1=s2=s3; 被C++编译器解释为 s1.operator=(s2.operator=(s3)); 例9.1 完整实现str类的例子。 说明: 有两个赋值运算符重载函数: str str::operator=(str); //用于对象之间的赋值 s2=s1=s3; //调用此函数 str str::operator=(char*);//用于字符串对对象的赋值 s3=“here”;//调用此函数 上述赋值运算符的使用可改成正规成员函数调用的形式,如 s2.operator=(s1.operator=(s3)); //s2=s1=s3; s3.operator=(“here”); //s3=“here”; 9.1.2 运算符重载的实质 运算符重载的例子:1/2=0, 1.0/2.0=0.5。 任何运算符都是通过函数实现的。如2+3,C++将这个表达式解释为函数调用的形式: operator+(2,3); 然后去找原型为operator+(int,int)的函数来实现表达式的计算。 运算符的重载实质上就是函数的重载。 运算符重载需要关键字operator。operator与运算符构成一个运算符函数名,如operator+()。我们可以为自己定义的类型来重载operator+(),从而实现运算符的重载。 由于用户为某类型定义的重载运算符一般需要能够访问该类型的私有成员,所以只能将运算符重载为该类型的成员函数或该类型的友元。为了区别这两种情况,将作为类成员函数的重载运算符称为类运算符,而将作为类友元的重载运算符称为友元运算符。 不是所有运算符都可以重载,不能重载的运算符有:“.” ,“::”,“.*”和“? :”。(注意书上错误) “sizeof”和“#”不是运算符,所以不能重载。 “=”,“()”,“[]”,“-”这四个运算符只能用类运算符重载。 9.1.3 ,和++运算符重载实例 插入运算符 “” 和提取运算符“”也可以重载。 两个运算符的特点是在流对象的后面,所以可以作为“流”的成员函数,但流是标准库,不允许修改,不能是流的成员。操作对象不在运算符的左边,不能做为操作对象类的成员函数。要用该运算符输出对象,必须能访问对象的私有成员,所以它们必须作为类的友元重载。 output是类ostream对象的引用,它是cout的别名。调用此函数时,output引用cout。 第二个参数可以是对象或引用,推荐使用引用。 input是类istream对象的引用,它是cin的别名。调用此函数时,input引用cin。 由于调用此函数要改变对象的值,所以第二个参数必须是对象引用。 注意: 如果将返回

文档评论(0)

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

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

1亿VIP精品文档

相关文档