全局函数 做 友元函数

类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?
    解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。
    程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。
    
    让全局的好基友函数 变为 我的好朋友 友元函数
    
    友元函数 目的:访问类中的私有成员属性
    
    全局函数做友元函数 
        全局函数 写到类中作声明 并在前面关键字 friend

class Building {friend void goodGay(Building* building);
public:Building() {this->m_SittingRoom = "客厅";this->m_BedRoom = "卧室";}public:string m_SittingRoom;private:string m_BedRoom;
};void goodGay(Building* building) {cout << "A goodGay is visiting " << building->m_SittingRoom << "。" << endl;cout << "A goodGay is visiting " << building->m_BedRoom << "。" << endl;}void test8() {Building* building = new Building;goodGay(building);
}

让整个类 做友元类

friend class 类名
    友元类 是单向, 不可传递的。

成员函数 做 友元函数

friend void goodGay::visit();

/*只让 visit 可以作 Building 的好朋友visit2 不可以访问私有属性
*/
class Building;
class goodGay {
public:goodGay();void visit();void visit2();
private:Building* building;
};
class Building {//让成员函数 visit 作为友元函数friend void goodGay::visit();
public:Building();public:string m_SittingRoom;private:string m_BedRoom;
};goodGay::goodGay() {building = new Building;
}void goodGay::visit() {cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}void goodGay::visit2() {cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}Building::Building() {this->m_SittingRoom == "客厅";this->m_BedRoom = "卧室";
}void test08() {goodGay gg;gg.visit();
}

友元函数(friend)相关推荐

  1. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

  2. C++ primer 第七章之 友元函数与友元类

    1.为什么需要友元函数?  类具有封装和信息隐藏的特性: 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的 ; 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公 ...

  3. 友元函数、类的非静态成员函数、静态成员函数的区别

    类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...

  4. C++——运算符的重载---以成员函数方式重载---以友元函数方式重载

    一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...

  5. C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...

  6. C++中的友元函数friend

    1.C++中的友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员.尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数.友 ...

  7. C++中友元函数和友元类

    友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: frien ...

  8. 运算符中的二元重载,为什么要调用友元函数而不是全局函数的问题

    #include <iostream>using namespace std; //实现运算符的重载 class A { public:A(int real=0,int imaginary ...

  9. C++友元函数和友元类(C++ friend)详解

    在看VISP视觉库的时候遇到友元函数: Friends void swap (vpDetectorAprilTag &o1, vpDetectorAprilTag &o2) 在定义一个 ...

  10. 第七周项目一-成员函数、友元函数和一般函数有区别(1)

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...

最新文章

  1. lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值
  2. Python里三个最高逼格的调试神器
  3. Angular的_zone.onMicrotaskEmpty最终会通过changeDetect重新刷新视图
  4. vue中computed、metfods、watch的区别
  5. keepalived VS zookeeper
  6. LeetCode-148:排序链表
  7. 二叉树的中序遍历_94. 二叉树的中序遍历 - 中等
  8. css通配选择符用什么表示,css3选择符使用个人理解。
  9. 1024程序员节持续引爆星城:500万程序员线上线下互动,共迎开源软件、操作系统新时代...
  10. 终极版Servlet——我只能提示您路过别错过
  11. 更改JENKINS主目录
  12. NVIDIA历史驱动下载
  13. 软磁材料和硬磁材料的区别
  14. Android Studio个人使用记录
  15. ifb与tc police对接收方向限速性能比较
  16. centos7双机搭建_Centos7 Mysql 双机热备实现数据库高可用
  17. 量化投资学习-10:追涨杀跌的本质是“高买低卖”,这是散户亏钱的背后的操作逻辑
  18. 下载landsat8 L2级产品的步骤
  19. android 吐泡泡动画,android仿摩拜贴纸碰撞|气泡碰撞
  20. oracle的脚本日志,学习笔记:Oracle alert日志文件巡检脚本

热门文章

  1. PTA java 异常:圆半径不能为负数
  2. ue4输出id层的两种方式
  3. 计算机操作技能竞赛系列方案,2018年第十届学生技能展示计算机专业活动方案...
  4. 解除IE锁定主页批处理
  5. sntp服务器位置,sntp的服务器地址
  6. 微软发布 FY23 Q3(自然年 2023年 Q1)财报
  7. 从宏观到细节为你讲解前端性能优化
  8. 大三IT学生如何找暑期实习呢?技术实习找大公司还是小公司?
  9. NSIS:延时启动软件的几个方法及探索
  10. jsx介绍以及语法总结