北大青鸟 c 第七章 友员 Ⅴ ersion3.0 CHA
Version 3.0 友员 第七章
回顾 文件输入 文件输出 异常处理 北大青鸟
2 回顾 • 文件输入 • 文件输出 • 异常处理
目标 友元函数 友元类 操作符重载 北大青鸟
3 目标 • 友元函数 • 友元类 • 操作符重载
友元函数41 非成员函数不能访问私有成员 友员函数允许访问类的私有部分而不是成员 4000 北大青鸟
4 友元函数 4-1 • 非成员函数不能访问私有成员 • 友员函数允许访问类的私有部分而不是成员
友元函数42 类 友元函数 私有! 闪开!只允许 成员和友元访问 北大青鸟
5 友元函数 4-2 类 友元函数 私有!
友元函数43 class teacher private in七a public: teacher o friend int stud( teacher);没有 friend int stud(teacher tl) return(t1.a);//因为stud()是一个友元 大青鸟
6 友元函数 4-3 class teacher { private: int a; public: teacher() { a = 5; } friend int stud(teacher); }; int stud(teacher t1) { return (t1.a); //因为stud()是一个友元 } 没有friend
友元函数44 class Teacher i //前向声明 class student private: 类只有在声明之 int st data; 后才能被引用 public: v。 id gets tuddata(); friend void display(student abc, Teacher xyz)i class Teacher private: int th data; ublic void getteachdatao)i friend void display (student abc, Teacher xyz)i void display (student abc, Teacher xyz)( //某些代码 我是大家的朋友 大青鸟
7 友元函数 4-4 class Teacher; //前向声明 class Student { private: int st_data; public: void getstuddata(); friend void display(Student abc, Teacher xyz); }; class Teacher { private: int th_data; public: void getteachdata(); friend void display(Student abc, Teacher xyz); }; void display(Student abc, Teacher xyz) { //某些代码 } 我是大家的朋友 类只有在声明之 后才能被引用
友元函数的特性 拥有访问类的私有部分的权限 没有this指针 ·可以置于类说明的私有或公有部分 定义友元函数时,不需要使用类名和作用城 解析操作符作为前綴 北大青鸟
8 友元函数的特性 • 拥有访问类的私有部分的权限 • 没有 this 指针 • 可以置于类说明的私有或公有部分 • 定义友元函数时,不需要使用类名和作用域 解析操作符作为前缀
优点 在接口设计的选择方面提供了自由度 成员函数和友元函数具有同等的特权 主要的区别 友元函数的调用方式类似于 func( object 而成员函数的调用方式类似于 object. func() 设计者可以选择最有可读性的语法 北大青鸟
9 优点 • 在接口设计的选择方面提供了自由度 • 成员函数和友元函数具有同等的特权 – 主要的区别: 友元函数的调用方式类似于 func(xobject) , 而成员函数的调用方式类似于 object.func( ) – 设计者可以选择最有可读性的语法
缺点 提高了编程的灵活性,但是违背了面 向对象编程的原则 在编码中对完整性的破坏可以在一定程 度上加以控制 必须在它要访问的类中进行声明。没 有源代码是无法完成的 北大青鸟
10 缺点 • 提高了编程的灵活性,但是违背了面 向对象编程的原则 – 在编码中对完整性的破坏可以在一定程 度上加以控制 • 必须在它要访问的类中进行声明。没 有源代码是无法完成的