欢迎来到天天文库
浏览记录
ID:50041722
大小:194.00 KB
页数:35页
时间:2020-03-08
《C++面向对象程序设计 教学课件 作者 朱战立 张玉祥 C++4.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章友元和运算符重载掌握:友元的概念、设计方法;运算符重载为成员函数的方法;运算符重载为友元函数的方法;友元的基本概念类似与现实世界,给朋友以更大的分享权利优点:给设计人员提供了便利性缺点:使面向对象软件的封装性有了一些漏洞分类友元类-类B定义类A是自己的朋友,则A是B的友元类。类A中的所有成员函数都可以访问类B的所有成员。友元函数-类B定义某个函数是自己的友元,称该函数是类B的友元函数。该函数可以访问类B的所有成员友元成员函数-类B定义类A的某个成员函数是自己的友元,称该函数是类B的友元成员函数。该函数可以访问类
2、B的所有成员友元类定义类A是类B的友元类:classB{friendclassA;//定义友元类(类B的常规定义)};可以放在类B的任意位置,通常放在类定义的首部要求类A在程序中有定义友元类不能传递,不能继承,不具有相互性例4-1友元类设计#includeclassB{friendclassA;private:inttopSecret;public:B(intt=0):topSecret(t){}intGetTopSecret(void){returntopSecret;}};classA{p
3、ublic:A(void){}~A(void){}voidchange(B&b)const{b.topSecret++;}}voidmain(void){Bb(0);Aa;a.change(b);cout<;(类A的常规定义)}函数f()是定义在类A外的一个函数。如果函数需要频繁访问类A的私有成员,可以将该函数定义成类A的友元函数#includeclassComp
4、lex{friendComplexAdd(Complexfirst,Complexsecond);friendvoidPrint(Complexcom);private:floatreal;floatimag;public:Complex(floatre=0,floatim=0):real(re),imag(im){}~Complex(void){}};ComplexAdd(Complexfirst,Complexsecond){returnComplex(first.real+second.real,first.i
5、mag+second.imag);}voidPrint(Complexcom){cout<<"("<;(类B的常规定义)};可以用定义友元类的方法代替不常用运算符重载特点:运算符使用方便。如x+yC+
6、+语言规定:重载的运算符要保持原运算符的意义。只能对已有的运算符重载,不能增加新的运算符。重载的运算符不会改变原先的优先级和结合性。运算符重载的形式成员函数友元函数允许重载的运算符(见教材93页)运算符重载为成员函数成员函数<返回值类型>operater<运算符>(形参列表)例:复数加Complexoperater+(constComplex&x)const应用程序中的表达式<对象A><运算符>(<实际参数>)例:ComplexA,B;//假设有此定义A+B;//则程序中可有这样的表达式编译系统内部表示<对象A>.o
7、perater<运算符>(实际参数)例:A.operater+(B)例-2设计一个复数类,复数运算包括加、减、乘、除、赋值、加赋值、判等和打印,要求复数运算重载为类的成员函数形式的运算符,并要求对所设计的类进行测试。#includeenumBooler{TRUE,FALSE};classComplex{private:doublereal;doubleimage;public:Complex(void):real(0),image(0){};Complex(doublerp):real(rp)
8、,image(0){};Complex(doublerp,doubleip):real(rp),image(ip){};~Complex(){};Complexoperator+(constComplex&x)const;Complexoperator-(constComplex&x)const;Complexoperator*(constCo
此文档下载收益归作者所有