C++友元(1) - 友元类与友元函数
来源:互联网 发布:对阿里云的理解 编辑:程序博客网 时间:2024/05/01 19:51
1.Friend Class (友元类)
一个友元类可以访问声明它的类中的私有和保护成员。在需要指定某个类访问另一个类的私有成员时,友元类会很有用。
例如, 一个链表类可能会被允许来访问Node类中的私有成员。
class Node{private: int key; Node *next; friend class LinkedList; //链表可以访问Node的私有数据};
2.Friend Function (友元函数)
与友元类相似,友元函数可以访问私有和保护成员。
一个友元函数可以定义为下面情形之一:
a) 另一个类的成员方法
b) 全局函数
a) 另一个类的成员方法
b) 全局函数
class Node{private: int key; Node *next; friend int LinkedList::search(); //只有linkedList中的search函数,才能访问Node的私有数据。};
3.友元类与友元函数的一些重要概念:
1) 友元只能被有限制的使用。如果太多的使用友元,则违反了面向对象编程中的封装原则。
2) 友元不是相互作用的。如果A是B的友元,B不一定是A的友元。
3) 友元不能继承。
4) Java没有友元。
4.友元类的访问
#include <iostream>class A {private: int a;public: A() { a=11; } friend class B; // 友元类};class B {private: int b;public: void showA(A& x) { // 因为B是A的友元类,所以可以访问A的私有成员a std::cout << "A::a = " << x.a; }};int main() { A a; B b; b.showA(a); return 0;}输出:
A::a = 11
5.成员函数做为友元函数
#include<iostream> class B; class A{public: void showB(B& );}; class B{private: int b;public: B() { b = 0; } friend void A::showB(B& x); // 友元函数}; void A::showB(B &x){ // 因为show() 是B的友元函数,故它可以访问B的私有成员b std::cout << "B::b = " << x.b;} int main(){ A a; B x; a.showB(x); return 0;}</span>输出:
B::b = 0
6.全局函数做为友元函数
#include <iostream> class A{ int a;public: A() {a = 0;} friend void showA(A&); // 全局友元函数}; void showA(A& x) { std::cout << "A::a=" << x.a;}int main(){ A a; showA(a); return 0;}输出:
A::a = 0
更多参考:
http://en.wikipedia.org/wiki/Friend_class
http://en.wikipedia.org/wiki/Friend_function
http://www.cprogramming.com/tutorial/friends.html
http://www.parashift.com/c++-faq/friends-and-encap.html
0 0
- C++友元(1) - 友元类与友元函数
- [c++]友元函数
- 【C++】友元函数
- c++:友元函数
- C++:友元函数
- 【C++】友元函数
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 文件描述符合套接字有什么关系???
- OC语言内存管理
- C++静态库与动态库
- 使用Docker registry镜像创建私有仓库
- IDF实验室:包罗万象--图片里的英语
- C++友元(1) - 友元类与友元函数
- Maxwin-z/XListView-Android(下拉刷新上拉加载)源码解析(二)
- frame实现菜单导航
- git cmd list 7
- 在PyQt里面如何做长操作时同时更新GUI
- SQL注入
- Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据
- openwrt luci theme
- Android中对json数据的解析