文档详情

面向对象的程序设计语言——C++ 第二版 教学课件 作者 陈志泊 第08章.ppt

发布:2017-08-15约2.64千字共17页下载文档
文本预览下载声明
北京林业大学 软件教研室 第8章 运算符重载 本章主要内容 (1)了解运算符重载的概念及意义。 (2)掌握运算符重载为类的成员函数的方法。 (3)掌握运算符重载为类的友元函数的方法。 (4)掌握赋值运算符的重载方法。 8.1 运算符重载的概念 在C++中,所有系统预定义的运算符都是通过运算符函数来实现的。 在用户自定义的新类中可以重载这些函数。 在类中对运算符函数进行重载的方法: 重载为类的成员函数 重载为类的友元函数 8.2 重载为类的成员函数 在类中定义一个同名的运算符函数来重载该函数。 TYPE X::operator@(形参表) { //函数体 //重新定义运算符@在指定类X中的功能 } 由于将运算符函数重载为类的成员函数,所以,操作的一方当然是当前对象: 如果重载单目运算符,就不必另设置参数; 如果是重载双目运算符,就只要设置一个参数作为右侧运算量,而左侧运算量就是该对象本身。 【例8-1】定义一个表示复数的类Complex,并在该类中对运算符“+”进行重载,以实现两个复数的加运算。 8.3 重载为类的友元函数 定义一个与某一运算符函数同名的全局函数; 然后再将该全局函数声明为类的友元函数,从而实现运算符的重载。 friend TYPE operator@(形参表); 说明: (1)operator是关键字、@是需要被重载的运算符,TYPE是该运算符函数的返回值类型。关键字operator与后面的运算符@共同组成了该运算符函数的函数名。 (2)对于双目运算符,参数表中包含两个参数: TYPE operator@(TYPE a, TYPE b) (3)对于单目运算符,参数表中只包含一个参数: TYPE operator@(TYPE a) 【例8-2】定义一个表示复数的类Complex,并在该类中对运算符“-”进行重载,以实现两个复数的减运算。 8.4 运算符重载的限制 (1)在C++中,几乎所有系统预定义的运算符(除“.”、“*”、“::”、“?:”、sizeof外)都可以被重载。 (2)运算符的重载既不会改变原运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。 (3)运算符函数operator @()通常被声明为类的成员函数或友元函数。其等价的函数调用形式如下表所示。 (4)当重载为类的成员函数时,运算符重载函数的形参个数要比运算符操作数个数少一个;若重载为友元函数,则参数个数与操作数个数相同。 (5)“=”、“()”、“[]”和“-”等运算符不能用友元函数方式重载。 8.5 典型运算符重载 8.5.1 赋值运算符的重载 默认的重载赋值运算符的功能是逐个拷贝一个对象的所有数据成员到另外一个对象。 这种赋值方式当对象中包含动态分配内存空间的情况有可能出错,因为类的数据成员中包含指针,简单的赋值操作会使得两个对象中的指针成员指向同一个空间,运行时会发生错误,这时则需要用户自己定义重载的赋值运算符。 【例8-3】创建一个字符串类String,并重载赋值运算符“=”为其成员函数。 8.5.2 单目运算符的重载 单目运算符可以作为类的成员函数重载,也可以作为类的友元函数重载;、作为成员函数重载是没有参数,而作为友元函数重载时有一个参数。 【例8-4】创建一个字符串类String,并重载运算符“!”为其成员函数,用于判断对象中的字符串是否为空。 两种方式调用该函数 表达式,如!s1 通过对象调用其成员函数,如s2.operator !() 还可以将单目运算符重载为类的友元函数,这时需要重载函数有一个参数。 【例8-5】创建一个字符串类String,并重载运算符“!”为其友元函数,用于判断对象中的字符串是否为空。 8.6 综合实例 【例8-6】设计一个字符串类String。并使其能完成以下功能: (1)能使用“=”运算符完成两个字符串的赋值。 (2)能使用“==”运算符完成对两个字符串是否相等的判断。 (3)能使用“+=”运算符完成两个字符串的连接。 编写相应的程序实现该类,并进行测试。 分析:根据本题的题意,要设计的字符串类String,应包含1个指向字符串的指针p_str的数据成员和以下的成员函数: (1)相应的构造函数、拷贝构造函数和析构函数; (2)对=、==、+=三个运算符进行重载,使其能直接对两个字符串进行相应的运算; (3)显示函数display, 用于显示对象中的字符串。 小结 (1)运算符重载的意义是使系统已有的运算符对用户自定义的数据类型(如类类型)进行操作。运算符重载的实质就是函数重载。 (2)在类中可以采用两种方法对运算符函数进行重载:一是重载为类的成员函数,二是重载为类的友元函数。 (3)当重载为类的成员函数
显示全部
相似文档