- 4
- 0
- 约2.41万字
- 约 93页
- 2018-04-23 发布于河南
- 举报
C及Windows可视化程序设计第9章
第9章 运算符重载及流类库 9.1 运算符重载 9.2 流类库 9.3 文件操作 实验 习题 在建立了自己的类以后,C++允许程序员重新定义C++中已有的运算符,通过运算符重载,就可像处理基本数据类型那样使用它们。 为了面向对象编程的需要,C++提供了一个用于输入输出(I/O)操作的类体系,这个类体系提供了对预定义类型进行I/O操作的能力,程序员也可以利用这个类体系进行自定义类型的I/O 操作。 本章将简要介绍运算符重载的基础知识、流类库的概念及使用流类库进行文件存取的基本方法。 9.1 运算符重载 9.1.1 运算符重载的实质 读者已经熟悉了函数重载,按此推理,表达式 9/2=4,而9.0/2.0=4.5 。这里的同一个运算符“/ ”,由于所操作的数据不同而具有不同的意义,称为“运算符重载”也就顺理成章了。这个“/”的重载就是系统预先定义的运算符重载。 C ++是由函数组成的,在C++内部,任何运算都是通过函数来实现的。因此,在处理表达式 8+7时,C ++将这个表达式解释成如下的函数调用表达式: operator + ( 8, 7 ); 然后就去寻找,看看有没有以operator + (int,int)为原型的函数。 因为系统已经定义了一个这样的函数,于是就调用这个函数。因为任何运算都是通过函数来实现的,所以运算符重载其实就是函数重载,要重载某个运算符,只要重载相应的函数就可以了。 与以往稍有不同的是,需要使用新的关键字“operator”,它经常和C++的一个运算符连用,构成一个运算符函数名,例如“operator +”。这种构成方法就可以像重载普通函数那样,重载运算符函数operator +( )。由于C++已经为各种基本数据类型定义了该运算符函数,所以只需要为自己定义的类型重载operator +( )就可以了。 一般地,为用户定义的类型重载运算符,都要求能够访问这个类型的私有成员。 只有两条路可走: 要么将它重载为这个类型的成员函数,要么将它重载为这个类型的友元。 为区别这两种情况,将作为类的成员函数称为类运算符;将作为类的友元的运算符称为友元运算符。 9.1.2 类运算符和友元运算符的异同 下面对复数类分别使用这两种重载。运算符重载为类的友元函数的格式如下: friend 函数类型operator 运算符(形参1,形参2) {……//函数体定义} 形参可以都是对象或者对象的引用,也可以一个为对象一个为引用,这要视具体问题而定。 对本题而言,下面给出使用对象和引用的两种函数原型声明,其函数体的定义是一样的。 //对象 friend complex operator +(complex ,complex); //对象引用 friend complex operator +(complex ,complex); //使用对象的定义 complex operator +(complex c1,complex c2) {return complex(c2.real+c1.real,c2.imag+c1.imag);} //使用引用定义 complex operator +(complex c1,complex c2) {return complex(c2.real+c1.real,c2.imag+c1.imag);} //也可以使用如下引用定义的方法: complex operator +(complex c1,complex c2) { double r=c2.real+c1.real; double i=c2.imag+c1.imag; return complex(r, i); } 【例9.1】 友元运算符重载 #include iostream.h class complex { private: double real, imag; public: complex(double r=0, double i=0) { real=r; imag=i;} friend complex operator + (complex, complex); void show() {coutreal″+″imag″i″;} }; complex operator + (complex a,complex b) { double r = a.real + b.real; double i = a.imag + b.imag; return complex(r,i); } void main( ) { complex x(2.3,3
您可能关注的文档
- 深圳市2009年初中毕业生学业考试试卷.doc
- 第七章稳恒磁场3.ppt
- 第七章开金矿博弈与逆推归纳法.ppt
- 学计算机必读.doc
- 16.2.1.1分式乘除.doc
- 2009年全国小学生英语竞赛.doc
- 台塑的异常管理方法.doc
- 1.3信息技术及发展.ppt
- BIGIPV9HA配置文档.doc
- (英语口语)Lesson 18 Text A Christmas Cards.doc
- 2026年《Python程序设计》试题库200道带答案(考试直接用).docx
- 2026年内江卫生与健康职业学院单招职业技能考试题库及答案详解(考点梳理).docx
- 2026年信阳涉外职业技术学院单招职业技能考试题库带答案详解(综合卷).docx
- 2026年兴安职业技术学院单招职业技能考试题库附答案详解(考试直接用).docx
- 2026上半年安徽事业单位联考国家税务总局安徽省税务局招聘42人备考题库及答案详解(全优).docx
- 2026上半年安徽事业单位联考铜陵市义安区招聘27人备考题库附答案详解(夺分金卷).docx
- 2026上半年安徽事业单位联考国家税务总局安徽省税务局招聘42人备考题库带答案详解(研优卷).docx
- 2026上半年安徽事业单位联考怀远县笔试招聘58人备考题库附答案详解(完整版).docx
- 2026上半年安徽事业单位联考颍上县招聘51人备考题库及答案详解(全优).docx
- 2026上半年安徽事业单位联考宣州区招聘30人备考题库带答案详解.docx
原创力文档

文档评论(0)