友元函数(friend)
全局函数 做 友元函数
类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?
解决方法是使用友元函数,友元函数是一种特权函数,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)相关推荐
- C++ 笔记(30)— 友元函数与友元类
我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...
- C++ primer 第七章之 友元函数与友元类
1.为什么需要友元函数? 类具有封装和信息隐藏的特性: 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的 ; 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公 ...
- 友元函数、类的非静态成员函数、静态成员函数的区别
类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...
- C++——运算符的重载---以成员函数方式重载---以友元函数方式重载
一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...
- C++运算符重载形式--成员函数or友元函数?
1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...
- C++中的友元函数friend
1.C++中的友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员.尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数.友 ...
- C++中友元函数和友元类
友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: frien ...
- 运算符中的二元重载,为什么要调用友元函数而不是全局函数的问题
#include <iostream>using namespace std; //实现运算符的重载 class A { public:A(int real=0,int imaginary ...
- C++友元函数和友元类(C++ friend)详解
在看VISP视觉库的时候遇到友元函数: Friends void swap (vpDetectorAprilTag &o1, vpDetectorAprilTag &o2) 在定义一个 ...
- 第七周项目一-成员函数、友元函数和一般函数有区别(1)
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月12日*版 本 号: ...
最新文章
- lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值
- Python里三个最高逼格的调试神器
- Angular的_zone.onMicrotaskEmpty最终会通过changeDetect重新刷新视图
- vue中computed、metfods、watch的区别
- keepalived VS zookeeper
- LeetCode-148:排序链表
- 二叉树的中序遍历_94. 二叉树的中序遍历 - 中等
- css通配选择符用什么表示,css3选择符使用个人理解。
- 1024程序员节持续引爆星城:500万程序员线上线下互动,共迎开源软件、操作系统新时代...
- 终极版Servlet——我只能提示您路过别错过
- 更改JENKINS主目录
- NVIDIA历史驱动下载
- 软磁材料和硬磁材料的区别
- Android Studio个人使用记录
- ifb与tc police对接收方向限速性能比较
- centos7双机搭建_Centos7 Mysql 双机热备实现数据库高可用
- 量化投资学习-10:追涨杀跌的本质是“高买低卖”,这是散户亏钱的背后的操作逻辑
- 下载landsat8 L2级产品的步骤
- android 吐泡泡动画,android仿摩拜贴纸碰撞|气泡碰撞
- oracle的脚本日志,学习笔记:Oracle alert日志文件巡检脚本