友元基本概念:

1,把一个一般函数声明为一个类的友元函数

2,把一个类A的某几个成员函数声明为某个类B的友元函数

3,把一个类A声明为一个类B的友元类。

友元的作用:可以访问类B里所有的成员变量和成员方法,不管是public,protected,还是private。

1,把一个一般函数show声明为一个类的友元函数

#include <iostream>
using namespace std;class Test{friend void show(const Test &t);
public:Test(int d = 0) : data(d){}
private:void fun()const{cout << "fun:" << data << endl;}int data;
};//友元,即可以访问私有成员变量,也可以访问私有方法
void show(const Test &t){cout << "friend of Test:" << t.data << endl;t.fun();
}int main(){Test t(100);show(t);return 0;
}

2,把一个类A的fun成员函数声明为类Test的友元函数,但是类A的fun1函数不是类Test的友元函数,所以在fun1里不能够访问Test的私有成员。

#include <iostream>
using namespace std;class Test;class A{public:A(int d = 0) : data(d){}void fun(const Test &t);void fun1(const Test &t);private:int data;
};class Test{friend void A::fun(const Test &t);
public:Test(int d = 10) : data(d){}
private:int data;
};void A::fun(const Test &t){cout << t.data << endl;
}
void A::fun1(const Test &t){//编译不能通过,因为fun1不是class Test的友元函数。               //cout << t.data <<endl;
}
int main(){Test t(100);A a;a.fun(t);
}

3,把类B声明为一个类Test的友元类,因此,类B的所有public成员函数都是类Test的友元函数。

#include <iostream>
using namespace std;class Test;class B{
public:void fun1(const Test &t);void fun2(const Test &t);
};class Test{friend class B;
public:Test(int d = 0) : data(d){}
private:void pri()const{cout << "pri" << endl;}int data;
};void B::fun1(const Test &t){cout << t.data << endl;
}
void B::fun2(const Test &t){t.pri();
}int main(){Test t(10);B b;b.fun1(t);b.fun2(t);
}

转载于:https://www.cnblogs.com/xiaoshiwang/p/9502990.html

c/c++ 友元基本概念相关推荐

  1. c语言的友元函数的用法,C++友元函数和友元类概念解析

    一.友元函数 友元函数是一种特殊的函数,它需要在类体内进行说明,可以访问类的私有成员和保护成员,但又不是类的成员函数.友元函数的说明如下: friend 数据类型函数名(参数) 其中,friend是说 ...

  2. 【C++深度剖析教程8】C++的操作符重载的概念

    之前学习了类的函数重载的概念,今天学习操作符重载的概念.在这之前我们先看一个例子: 上面是一个复数的加法,a为复数的实部,b为复数的虚部,在main函数里我想实现复数c1与c2的加法.很显然,正常的+ ...

  3. C++:11---友元函数、友元类

    一.友元(friend)  概念:通过友元,打破了类的封装性,可以访问类内的所有成员 分类:友元函数.友元类 二.友元函数 概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系 友元函数可 ...

  4. c++远征之模板篇——友元函数、友元类

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.友元函数 1.分类 全局函数-->友元全局函数 成员函数-->友元成员函数 2.关键字friend 友元全局函数 如下,利用fri ...

  5. C++基础知识友元friend、友元函数和友元类

    为了在类之间进行数据共享时,提高效率,C++引入了友元的概念.友元主要有三个方面的应用: 将普通函数声明为类的友元函数: 将一个类声明为其他类的友元类: 将一个类中的成员函数声明为其他类的友元函数. ...

  6. C++之友元:是朋友(friend)也是破坏者

    目录 前言 1.友元的概念 1.1友元的基本概念 1.2友元的形式 1.3为什么要有友元的存在 2.友元函数 2.1友元函数的概念 2.2注意 3.友元类 3.1友元类的概念 2.2注意 4.友元成员 ...

  7. C++雾中风景1:友元类与面向对象

    因为后续准备入职的公司都希望能转C++,所以最近也是按部就班的开始进行C++的学习.然后这个系列的文章打算探究C++的语言特性,也比较一下不同语言(如Java,Scala,Python,Go)之间的设 ...

  8. Th3.9:友元函数、友元类、友元成员函数详述

     本博客将记录:类的相关知识点的第9节的笔记! (这个在学习C++基础课程时已经学习过一次了,这里再次简单地回顾一下而已) 今天总结的知识分为以下3个点:   一.友元函数(对于非成员函数而言)   ...

  9. 【C++基础】类和对象——友元

    [C++基础]类和对象--友元 友元的概念 在C++中,不能被外部访问的私有属性,通过友元可以访问. 友元的关键字:friend 友元的三种实现 全局函数做友元 类做友元 成员函数做友元 一.全局函数 ...

最新文章

  1. 机试记不住头文件_计算机考研机试攻略
  2. [WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)
  3. 爱立信数据分析解决方案抓住物联网发展机遇
  4. Java抓取淘宝/天猫商品详情
  5. 一个困扰数学家的古老谜题:意大利面能否被折成两段?
  6. Spring Boot笔记-banner.txt的使用
  7. VMware三种链接方式
  8. 苹果宣布北京时间9月15日凌晨举办发布会后,公司市值再创新高
  9. 如何利用MySQL Workbench创建Model EER 图
  10. 从零开始学_JavaScript_系列(13)——CSS2(新窗口打开,背景图片填充,底文字,小提示,CSS选择器整理)
  11. 骑行318、 2016.7.15
  12. 【stm32c8t6+esp8266上传温湿度到Onenet云平台】
  13. MATLAB积分方法
  14. 最实惠又容易上手的STM32的学习板,你确定不了解一下吗
  15. 模拟退火算法(Simulated Annealing,SA)的全面讲解及python实现
  16. 基金 撰写_撰写可转换的目标网页的7条提示
  17. Lifecycle与LiveData的珠联璧合
  18. linux定时发送远程邮件,实用技巧:Linux操作系统下定时发送邮件
  19. “产品经理进阶沙盘演练之产品谋划”技术讲座圆满结束!
  20. 随机过程基础(6)--应用随机过程分析音乐(语音)信号(1)、随机序列功率谱(PSD)

热门文章

  1. sql 创建用户脚本
  2. Android 监控网络状态
  3. android学习日记12--布局管理器
  4. Java---利用程序实现在控制台聊天
  5. Fragment结合ViewPager之懒加载
  6. rabbitmq的安装全过程
  7. Autowire异常
  8. Xcode7,ios9 issue ,warning合集
  9. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
  10. poj 1274 The Perfect Stall