C/C++ 初学简单笔记 —2.1— 类的友元
来源:互联网 发布:淘宝号申请注册 编辑:程序博客网 时间:2024/05/18 01:11
C++为解决效率的需要,提出了一个友元的概念。
只要把某个类外函数声明为该类的友元,就可以直接访问类中的任何成员(public,protect,private)
也就相当于说,开放了一个后门,既然是开后门,那么自然是在该类里面说明。
所以,所有的友元声明都应该在该类中。
1)将普通函数声明为类的友元,
如:class A
{
private:
int id;
friend void display(A &a); // 开了一个后门给 display
};
void display(A &a)
{
cout<<a.id<<endl; // 因为开了后门,所以可以直接访问
};
2)将某个类声明为本类的友元类
如:class A
{
private:
int id;
friend class B;
};
class B
{
public:
static void showA(A &a)
{
cout<<a.id<<endl;
}
};
3)将某个类的成员函数声明为本类的友元函数, 开放权限给某个成员函数
参考代码如下:
#include <iostream>
using namespace std;
class A; // 因为在类A的定义之前,类B用到了A,所以要先在这里做引用性声明
class B
{
public:
void showA(A &a);
};
class A
{
private:
int id;
public:
A(int id):id(id){};
// 注意:开放给其他类,那么其他类必须在此前已经有完整定义了!
friend void B::showA(A &a); // 要通过‘::’运算符表示开放权限给哪个类的成员函数
};
// 友元的成员函数,必须定义在该类的后面,不然找不到A的定义
void B::showA(A &a)
{
cout<<a.id<<endl;
}
int main()
{
A a(1);
B b;
b.showA(a);
return 0;
}
1)友元都声明在类中,只是说明友元函数,友元类有权访问类的所有成员,但并不表明友元函数和友元类属于该类的成员。
2) 友元声明不受权限的限制,声明在哪一行都行。
3)用friend 修饰,一般使用对象的别名作为参数
- C/C++ 初学简单笔记 —2.1— 类的友元
- C/C++ 初学简单笔记 —1—
- C/C++ 初学简单笔记 —2—
- C/C++ 初学简单笔记 —6.1 — 多线程
- C/C++ 初学简单笔记 —6.2 — 多线程
- C/C++ 初学简单笔记 —4— 多态性 虚函数和抽象类
- 初学c/c++——提及类的继承
- c++-类的友元
- C/C++——友元函数
- C/C++ 初学简单笔记 —3— 继承与派生
- C/C++ 初学简单笔记 —4.1— 多态性 运算符重载
- C/C++ 初学简单笔记 —5— 文件I/O
- 【C++】学习笔记五十二——友元
- C++—友元函数
- c初学笔记摘要
- 初学C#-----笔记一
- 初学C#-----笔记二
- 初学c/c++——rand,有趣的随机数
- Cache 功能、映射方法
- heheh
- loading黑马程序员之IO一些流操作(2-5)
- c++builder 2010 [ILINK32 Error] Fatal: Unable to open file 'xxxxxx.OBJ'
- linux 动态库路径查找
- C/C++ 初学简单笔记 —2.1— 类的友元
- Linux文件锁flock
- 开发者需知的10类工具
- c++builder 2010 with OpenSSL
- winsock入门之建立socket
- 用Node.js实现Restful风格webservice
- (转载优质文)定制iOS 7中的导航栏和状态栏
- 【iOS7的一些总结】3、视图控制器ViewControllers之间的数据传递(2)
- Iterable接口