C++笔记(二)友元
来源:互联网 发布:excel关联表格数据 编辑:程序博客网 时间:2024/06/06 04:03
友元机制允许一个类将对其非共有成员的访问权授予指定的函数或类。关键字friend。只能出现在类定义的内部。其声明尅在类中的任何地方。通常将友元声明成组地放在类定义的开始或结尾。
友元类:当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。
友元类可以通过自己的方法来访问把它当做朋友的那个类的所有成员。但是我们应该注意的是,我们把类B设置成了类A的友元类,但是这并不会是类A成为类B的友元。说白了就是:甲愿意把甲的秘密告诉乙,但是乙不见得愿意把乙自己的秘密告诉甲。即友元关系不具有对称性,也不具有传递性。
class girl;
class boy
{
private:
char *name;
int age;
public:
boy();
void disp(girl &);
};
void boy::disp(girl &x) //函数disp()为类boy的成员函数,也是类girl的友元函数
{
cout<<"boy's name is:"<<name<<",age:"<<age<<endl;//正常情况,boy的成员函数disp中直接访问boy的私有变量
cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl;
//借助友元,在boy的成员函数disp中,借助girl的对象,直接访问girl的私有变量
//正常情况下,只允许在girl的成员函数中访问girl的私有变量
}
class girl
{
private:
char *name;
int age;
friend boy; //声明类boy是类girl的友元
public:
girl();
};
void main()
{
boy b;
girl g;
b.disp(g); //b调用自己的成员函数,但是以g为参数,友元机制体现在函数disp中
}
友元函数:友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明。友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
class INTEGER
{
private:
int num;
public:
friend void Print(const INTEGER& obj);//声明友元函数
};
void Print(const INTEGER& obj)//不使用friend和类::
{
//函数体
}
void main()
{
INTEGER obj;
Print(obj);//直接调用
}
友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
友元函数和类的成员函数的区别:成员函数有this指针,而友元函数没有this指针。
- C++笔记(二)友元
- 【C++】【学习笔记】【020】友元
- Ruby元编程笔记<二>
- 友元函数(C++)
- C++-友元(friend)
- C++(5)/友元
- 友元函数的的使用学习笔记二
- python学习笔记(二)列表和元组
- Haskell 笔记(二)List和元组
- python学习笔记(二)列表和元组
- (一二二)友元函数
- 友元函数(二)
- 《C程序设计语言》笔记(二)
- C语言笔记(二)
- C语言程序设计笔记(二)
- openrefactory/c笔记(二)
- C语言笔记(二)
- c学习笔记(二)
- 自定义JS 字符串操作函数
- ps 查看系统进程
- 关于容器内URL传递中文参数乱码的解决方案
- Android中利用tcp dump抓包
- JSONArrayBuilder:用于生成格式简单的json array字符串
- C++笔记(二)友元
- Install VMware Tools on Ubuntu
- PHP 面向对象:访问控制
- Linux错误集以及其修复
- 【复习】NOIP2004
- ANDROID2.2新特性.APK安装参数INSTALLLOCATION
- STL iterators
- Android Shell命令相关内容讲解
- 关于eclipse中jre、tomcat配置问题