【C++基础 05】友元函数和友元类
来源:互联网 发布:瓜瓜播放器mac版 编辑:程序博客网 时间:2024/06/03 18:19
友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。
友元不是成员函数,但是它可以访问类中的私有成员。
友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
有两种形式的友元:
(1)友元函数:普通函数对一个访问某个类中的私有或保护成员。
(2)友元类:类A中的成员函数访问类B中的私有或保护成员。
友元函数:
在类声明的任何区域中声明,而定义则在类的外部。
friend <类型><友元函数名>(<参数表>);
示例:
class A{public: A(int _a):a(_a){}; friend int getA_a(A &_classA);//友元函数private: int a;};int getA_a(A &_classA){ return _classA.a;//通过对象名访问私有变量}int _tmain(int argc, _TCHAR* argv[]){ A _classA(3); std::cout<<getA_a(_classA);//友元函数只是普通函数,可以在任意地方调用 return 0;}需要注意的是:
(1)友元函数不是类成员函数,没有this指针。
(2)友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。
(3)友元函数只是一个普通函数,并不是该类的类成员函数,它可以在任何地方调用,友元函数中通过对象名来访问该类的私有或保护成员。
友元类:
可以理解为:类B的所有成员函数都为类A的友元函数,则类B为类A的友元类。
friend class <友元类名>;
示例:
class girl;class boy{public: void disp(girl &);};void boy::disp(girl &x) //函数disp()为类boy的成员函数,也是类girl的友元函数{ cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl;//借助友元,在boy的成员函数disp中,借助girl的对象,直接访问girl的私有变量}class girl{private: char *name; int age; friend boy; //声明类boy是类girl的友元};
需要注意的是,友元类没有继承性和传递性
(1)没有继承性:假如类B是类A的友元,类C继承于类A,那么友元类B是没办法直接访问类C的私有或保护成员。
(2)没有传递性:假如类B是类A的友元,类C是类B的友元,那么友元类C是没办法直接访问类A的私有或保护成员,也就是不存在“友元的友元”这种关系。
0 0
- 【C++基础 05】友元函数和友元类
- 【C++】友元类和友元函数(转)
- C++: 友元函数和友元类详解
- 『C/C++』友元函数和友元类
- C++友元函数和友元类的使用基础
- 【C++基础之十】友元函数和友元类
- 【C++基础之十】友元函数和友元类
- 【C++基础之十】友元函数和友元类
- C++——友元函数和友元类
- 友元函数和友元类
- 友元函数和友元类
- 友元类和友元函数
- 友元函数和友元类
- 友元函数和友元类
- 友元函数和友元类
- 友元函数和友元类
- 友元函数和友元类
- 友元函数和友元类
- HDU_1019 Least Common Multiple
- hdoj.2021 发工资咯:) 20140726
- Maven:Non-resolvable parent POM: Failure to find错误
- 网络存储ISCSI配置
- The Triangle (poj 1163)
- 【C++基础 05】友元函数和友元类
- 19.0~19.11 Dates, Calendars, and Events 日历事件的处理
- ASIHttpRequest详解
- ArrayList删除集合中某一属性相同的元素
- Amazon DynamoDB, 面向互联网应用的高性能、可扩展的NoSQL数据库
- [Unity-2] Unity播放音乐
- SOAP Webservice和RESTful Webservice(转载)
- SQL Server Profiler使用方法
- samba服务器的配置 Window --- Linux文件共享 (国嵌笔记)