C++及Windows可视化程序设计第9章.pptVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档