淘豆网
下载此文档放大查看缩小查看   1/21
下载文档 文档分类:IT计算机 > C/C++资料

c++课件 第八章 运算符重载.ppt

下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
0/100
您的浏览器不支持进度条


播放器加载中,请稍候...
更多>>该用户其他文档
下载所得到的文件列表
c++课件 第八章 运算符重载.ppt
文档介绍:
第八章第八章运算符重载运算符重载 8.1 远算符重载基本概念远算符重载基本概念 8.2 重载实现及重载重载实现及重载>> >> 与与<< << 8.3 一、二元运算符重载与一、二元运算符重载与 Array Array 类类 8.4 类型之间的转换类型之间的转换 8.5 实例研究实例研究: : String String 类、类、 Date Date 类及重载类及重载++ ++ 与与-- -- 8.1远算符重载基本概念远算符重载基本概念引入: 引入: C++ 允许重新定义已有的运算符,使其按用户的要求完成一些特定的操作,这就是运算符重载。运算符重载与函数重载相似,其目的是设置某一运算符,让它具有另一种功能,尽管此运算符在原先 C++ 语言中代表另一种含义,但他们彼此之间并不冲突。 C++ 会根据运算符的位置辨别应使用哪一种功能进行运算。运算符重载是对已有的运算符赋予多重含义,故同一个运算符作用于不同类型的数据导致不同类型的行为。实现: 实现: 运算符重载是通过编写函数定义实现的; 运算符重载是通过编写函数定义实现的; 函数定义包括:函数首部函数定义包括:函数首部+ +函数体;函数首部中的函数函数体;函数首部中的函数名名= =关键字关键字 operator + operator + 要重载的远算符符号; 要重载的远算符符号; 如:函数名如:函数名 operator+ operator+ 重载了重载了+ +; ; 注意: 注意: 用于类对象的运算符必须重载,除了赋值运算符用于类对象的运算符必须重载,除了赋值运算符(=) (=) 和和地址运算符地址运算符(&); (&); IF IF 不重载不重载= =; ; = = 的默认行为是复制类的数据成员的默认行为是复制类的数据成员; ; BUT BUT , ,此行为不利于指针成员此行为不利于指针成员?? OFTEN OFTEN , , WE NEED WE NEED 显示显示重载重载= =; ; IF NO OVERLOAD &, & IF NO OVERLOAD &, & 返回对象在内存中的地址; 返回对象在内存中的地址; ALSO, i ALSO, i t can be overloaded. can be overloaded. We need to write We need to write 运算符重载函数运算符重载函数 for special operation . for special operation . Frequently, there are two types Frequently, there are two types : : class member functions and class member functions and class friend functions. class friend functions. Forms Forms : : <return type> operator < <return type> operator < 运算符运算符> >( ( <parameter lists> <parameter lists> ) ) { {……; ; } } friend <return type> operator < friend <return type> operator < 运算符运算符> >( ( <parameter lists> <parameter lists> ) ) { {……; ; } } Under rare condition Under rare condition , , these functions may be not member these functions may be not member functions and not friend functions. functions and not friend functions. 规则: 规则: ( (1 1)、运算符重载是针对新类型的实际需要,对原有运)、运算符重载是针对新类型的实际需要,对原有运算符进行适当的改造;一般来讲,重载的功能应算符进行适当的改造;一般来讲,重载的功能应当与原有功能相类似,不能改变原运算符的操作当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义对象个数,同时至少要有一个操作对象是自定义类型。类型。( (2 2)、)、 C++ C++ 中的运算符除了少数几个以外,全部可以重中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符,祥见载,而且只能重载已有的这些运算符,祥见 P340 P340 ( (3 3 )、重载之后运算符的优先级和结合性都不会改变, )、重载之后运算符的优先级和结合性都不会改变, 且不能改变用于内部类型对象时的含义。且不能改变用于内部类型对象时的含义。( (4 4)、重载某个运算符,不能同时重载相关的运算符; )、重载某个运算符,不能同时重载相关的运算符; 如:重载如:重载+ +,不意味着,不意味着+= += 同时也重载了; 同时也重载了; 实质: 运算符重载的实质就是函数重载。实现过程:首先?把指定的运算表达式转化为对运算符函数的调用?运算对象转化为运算符函数的实参?然后根据实参的类型来确定需要调用的函数;(在编译过程中完成) 8.2 重载实现及重载重载实现及重载>> >> 与与<< << 运算符函数可以是成员函数,也可为非成员函数(此时通常为友运算符函数可以是成员函数,也可为非成员函数(此时通常为友元函数)。元函数)。注意:成员函数用注意:成员函数用 this this 指针隐式地访问对象的某个参数; 指针隐式地访问对象的某个参数; 非成员函数的调用必须明确给出参数; 非成员函数的调用必须明确给出参数; class A { public: bool operator != (const A & right ) const { return ! ( * this == right ) ; // == overload } Friend ostream &operator<< ( ostream &, const A& ); } 注意: A、重载()、[]、->或者赋值运算符= 时,运算符重载函数必须声明为类的一个成员; B、 When 运算符函数 is member function ,最左边的操作数( or only have the leftmost operand ) must be 所在类的对象 or 对象的引用; C C、、 When the leftmost operand is a different class object or inner When the leftmost operand is 内容来自淘豆网www.taodocs.com转载请标明出处.
更多>>相关文档
文档信息
最新下载
文档标签