操作符函数课件

上传人:我*** 文档编号:143734893 上传时间:2020-09-01 格式:PPT 页数:31 大小:123.50KB
返回 下载 相关 举报
操作符函数课件_第1页
第1页 / 共31页
操作符函数课件_第2页
第2页 / 共31页
操作符函数课件_第3页
第3页 / 共31页
操作符函数课件_第4页
第4页 / 共31页
操作符函数课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《操作符函数课件》由会员分享,可在线阅读,更多相关《操作符函数课件(31页珍藏版)》请在金锄头文库上搜索。

1、2020/9/1,1,C+简明教程,2,第十三章 操作符函数,操作符函数 友元函数 this指针,3,1、什么是操作符函数,1.1 问题的提出 类array的对象s1和s2的数组元素求和 void main() array a1,a2, a3; a1.input(); /输入1 2 3 a2.input(); /输入 4 5 6 a3 = a1.add(a2); a3.print(); /打印 5 7 9 ,4,1、什么是操作符函数,1.1 问题的提出 class array public: void input(); void print(); array add(array ,5,1、什么

2、是操作符函数,1.1 问题的提出 array array:add(array ,6,1、什么是操作符函数,1.1 问题的提出 void array:print() for (int k = 0;k3;k+) cout ak endl; ,7,1、什么是操作符函数,1.1 问题的提出 void array:input() for (int k = 0;k ak; ,8,1、什么是操作符函数,1.2 什么是操作符函数(操作符重载函数) 作用 C+的操作符赋予新的含义 语法 返回值类型 operator 运算符名称(参数列表) ,9,1、什么是操作符函数,1.3 操作符函数的使用 class arr

3、ay public: void input(); void print(); array add(array ,10,1、什么是操作符函数,1.3 操作符函数的使用 array array:operator + (array ,11,1、什么是操作符函数,1.3 操作符函数的使用 void main() array a1,a2, a3; a1.input(); /输入1 2 3 a2.input(); /输入 4 5 6 a3 = a1 + a2; /调用函数operator+ a3.print(); /打印 5 7 9 ,12,1、什么是操作符函数,1.4 为什么要使用操作符函数 array

4、 add(array /操作符函数的调用,13,2、操作符函数的使用,2.1 操作符函数是如何运行的 array array:operator + (array /dest拷贝给a3 ,14,2、操作符函数的使用,2.1 操作符函数是如何运行的 operator+的参数包括隐藏参数this: array array:operator + (array * this, array 说明:this是C+的一个关键字,是当前对象的一个指针,15,2、操作符函数的使用,2.1 操作符函数是如何运行的 a3 = a1 + a2; 等价于: a3 = a1.operator+(a2); 编译器将如上语句转

5、换为: a3 = operator+(/a1即为当前对象,16,2、操作符函数的使用,2.2 this指针的使用 class point public: set (int x, int y) /相当于set ( point * this,int x,int y) this-x = x; /参数与成员变量名称相同,使用this加以区分 this-y = y; private: int x,y; ;,17,2、操作符函数的使用,2.2 this指针的使用 void main() point p; point p.set(2,3);/相当于调用set( ,18,2、操作符函数的使用,2.3 操作符函

6、数的使用规则 只能对现有的C+运算符进行重载 如不能定义*运算符 重载不能改变运算符的优先级 重载不能改变运算符的结合性 如赋值运算符“=”自右向左结合,重载后仍然如此,19,3、操作符函数作为友元函数,3.1 问题的提出 为类array定义一个操作符函数operator*,可以将数组 a的元素乘以指定的数: void main() array a1,a2; a1.input(); /输入1 2 3; a2 = 2 * a1; a2.print(); /输出 1 4 6 ,20,3、操作符函数作为友元函数,3.1 问题的提出 class array public: void input();

7、void print(); array add(array ,21,3、操作符函数作为友元函数,3.1 问题的提出 array array:operator * (int n) array dest; for (int k = 0; k3;k+) dest.ak = ak * n; return dest; ,22,3、操作符函数作为友元函数,3.1 问题的提出 void main() array a1,a2; a1.input(); /输入1 2 3; a2 = 2 * a1; /操作符*可以运行吗? a2.print(); /输出 1 4 6 ,23,3、操作符函数作为友元函数,3.1 问

8、题的提出 原因:如果操作符函数是类的成员函数,则操 作符的左操作数必需为一个对象,如: a3 = a1 + a2; 运算符“+”的左操作数a1必须为类array的对象。,24,3、操作符函数作为友元函数,3.2 问题的解决方法 方法一、修改调用次序 a2 = a1 * 2; 方法二、使用友元函数,25,3、操作符函数作为友元函数,3.3 友元函数的解决之道 class array public: void input(); void print(); array add(array ,26,3、操作符函数作为友元函数,3.3 友元函数的解决之道 array operator * (int n,

9、 array ,27,3、操作符函数作为友元函数,3.3 友元函数的解决之道 void main() array a1,a2; a1.input(); a2 = 2 * a1; /调用友元函数operator * a2.print(); ,28,3、操作符函数作为友元函数,3.4 什么是友元函数 什么是友元函数 在类中用friend声明的函数 友元函数的访问权限 一个类的友元函数可以访问该类的私有成员,但友 元函数不是该类的成员函数。,29,3、操作符函数作为友元函数,3.5 必须使用友元函数进行重载的操作符 #include / VC要使用iostream.h class array public: void input(); void print(); friend array operator * (int n,array ,30,3、操作符函数作为友元函数,3.5 必须使用友元函数进行重载的操作符 void operator (ostream ,31,3、操作符函数作为友元函数,3.5 必须使用友元函数进行重载的操作符 void main() array a1 ; a1.input(); cout a1; / 运算符重载 说明: 的左操作数cout不是类array的对象,因此只能用友 元函数重载该操作符,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号