欢迎来到天天文库
浏览记录
ID:44264958
大小:306.00 KB
页数:23页
时间:2019-10-20
《Transparancy 7(C++)北大青鸟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、友员第七章回顾文件输入文件输出异常处理2目标友元函数友元类操作符重载3友元函数4-1非成员函数不能访问私有成员友员函数允许访问类的私有部分而不是成员4友元函数4-2类友元函数私有!闪开!只允许成员和友元访问5友元函数4-3classteacher{private:inta;public:teacher(){a=5;}friendintstud(teacher);};intstud(teachert1){return(t1.a);//因为stud()是一个友元}没有friend6友元函数4-4classTe
2、acher;//前向声明classStudent{private:intst_data;public:voidgetstuddata();friendvoiddisplay(Studentabc,Teacherxyz);};classTeacher{private:intth_data;public:voidgetteachdata();friendvoiddisplay(Studentabc,Teacherxyz);};voiddisplay(Studentabc,Teacherxyz){//某些代码}
3、我是大家的朋友类只有在声明之后才能被引用7友元函数的特性拥有访问类的私有部分的权限没有this指针可以置于类说明的私有或公有部分定义友元函数时,不需要使用类名和作用域解析操作符作为前缀8优点在接口设计的选择方面提供了自由度成员函数和友元函数具有同等的特权主要的区别:友元函数的调用方式类似于func(xobject),而成员函数的调用方式类似于object.func()设计者可以选择最有可读性的语法9缺点提高了编程的灵活性,但是违背了面向对象编程的原则在编码中对完整性的破坏可以在一定程度上加以控制必须在它要
4、访问的类中进行声明。没有源代码是无法完成的10友元类3-1当一个类的全部或者多数成员函数都必须访问访问另一个类时声明整个类为另一个类的友元11友元类3-2#includeclassbeta;//前向声明classalpha{private:inta_data;public:alpha(){a_data=10;}voiddisplay(beta);};classbeta{private:intb_data;public:beta(){b_data=20;}friendvoidalph
5、a::display(betabb);};类只有在声明之后才能被引用成员函数是友员12友元类3-3#includeclassbeta;//前向声明classalpha{private:intdata;public:friendclassbeta;//beta是一个友元类};classbeta{public:voiddisplay(alphad){//可以访问alphacout<6、}};类只有在声明之后才能被引用13操作符重载2-1将现有的操作符与一个成员函数相关联并与其类的对象一起使用使下面的操作成为可能if(obj1>obj2){//...}其中,obj1和obj2是一个类的对象14操作符重载2-2编译器通过检查操作数的类型来选择重载操作符是多态性的一种形式运算多态性15注意要点重载不能改变操作符的基本功能也不能改变其优先级顺序置++(自增)和--(自减)只能被用作一元操作符可以使用重载的+操作符来对两个对象相乘,但是这将使得代码难以理解16不能被重载的操作符sizeof()操7、作符圆点操作符(.)作用域解析操作符(::)条件操作符(?:)指向成员的指针操作符(.*)17优点使得程序更容易理解和调试obj3=obj1+obj2;而不是obj3.addobjects(obj1,obj2);18操作符函数重载操作符的实际指令operator关键字return_typeoperatorop(argumentlist);被重载的操作符19一元操作符的重载classtemp{private:intx,y;public:voidoperator++(void);};voidtemp::ope8、rator++(void){x++;y++;}20二元操作符的重载两种方式作为成员函数接受单参数,该参数是这个操作符右边的值作为友员函数接收双参数21为字符串类重载+操作符Stringoperator+(Strings2)//操作符函数{Stringtemp;//创建一个临时对象strcpy(temp.s,s);//复制这个字符串strcat(temp.s,s2.s);//追加参数字符串return(temp);//返回临时对
6、}};类只有在声明之后才能被引用13操作符重载2-1将现有的操作符与一个成员函数相关联并与其类的对象一起使用使下面的操作成为可能if(obj1>obj2){//...}其中,obj1和obj2是一个类的对象14操作符重载2-2编译器通过检查操作数的类型来选择重载操作符是多态性的一种形式运算多态性15注意要点重载不能改变操作符的基本功能也不能改变其优先级顺序置++(自增)和--(自减)只能被用作一元操作符可以使用重载的+操作符来对两个对象相乘,但是这将使得代码难以理解16不能被重载的操作符sizeof()操
7、作符圆点操作符(.)作用域解析操作符(::)条件操作符(?:)指向成员的指针操作符(.*)17优点使得程序更容易理解和调试obj3=obj1+obj2;而不是obj3.addobjects(obj1,obj2);18操作符函数重载操作符的实际指令operator关键字return_typeoperatorop(argumentlist);被重载的操作符19一元操作符的重载classtemp{private:intx,y;public:voidoperator++(void);};voidtemp::ope
8、rator++(void){x++;y++;}20二元操作符的重载两种方式作为成员函数接受单参数,该参数是这个操作符右边的值作为友员函数接收双参数21为字符串类重载+操作符Stringoperator+(Strings2)//操作符函数{Stringtemp;//创建一个临时对象strcpy(temp.s,s);//复制这个字符串strcat(temp.s,s2.s);//追加参数字符串return(temp);//返回临时对
此文档下载收益归作者所有