11 友元函数的使用大全
概述
我们知道,C++的类具有封装和信息隐藏的特性。一般情况下,我们会封装public的成员函数供用户调用,而将成员变量设置为private或protected。但在一些比较复杂的业务情况下,可能需要去访问对象中大量的private或protected成员变量。如果为这些private或protected成员变量都封装public成员函数,无疑是比较麻烦的,有时候还会影响程序的执行效率。此时,友元函数就派上了用场。
这就好比我们的房间安装了一个指纹锁,陌生人是无法进入房间内部的。但我们的好朋友有时候需要去一下房间,此时,可以把好朋友的指纹也录入指纹锁里面。这样,好朋友就可以顺利进入房间了。
基本规则
1、一个类的友元可以是函数(称为友元函数),也可以是另一个类(称为友元类)。
2、要为一个类声明友元时,需要在类声明中友元函数或友元类的前面加上friend关键字。类中友元的位置没有关系,放在public、protected和private均可。
class CBase
{friend class CFriend; // 友元类friend void FriendFunc(CBase &base); // 友元函数
public:CBase();private:void Show();protected:std::string m_strText;private:int m_nNumber;
};CBase::CBase() : m_strText("CSDN"), m_nNumber(66)
{NU
11 友元函数的使用大全相关推荐
- C++——运算符的重载---以成员函数方式重载---以友元函数方式重载
一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...
- 练习友元函数,有元类,快排和全排列问题
写了一小段代码: 练习一下友元类和友元函数的声明和使用: 练习一下最简单的快排算法: 练习一下递归的方法处理全排列问题. 代码: 1 #include <stdlib.h> 2 #incl ...
- 友元实例:友元类及友元函数
学习了c++这么久,一直没有对友元进行了解,据说友元不是特别好用(据说,不是我说的),因此直到今天才去了解.其实友元确实不是很常用,但友元功能确实很实用,它不但能够释放类中的非公有成员,同时还能保证了 ...
- C++ 友元(友元函数和友元类)
友元的作用:提高了程序的运行效率(使得普通函数可以直接访问类的保护数据,避免了类成员函数的频繁调用,即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问 ...
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- C++:友元(非成员友元函数、成员友元函数、友元类)
3.8 友元:友元函数和友元类 友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数.友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的 ...
- c++友元函数及运算符重载
c++的类和java的类机制着实不大一样,不仅仅是语法,还包括一些特殊的东西,如c++用友元函数来破坏类的封装性,使得外界(友元函数体)可以访问类的私有属性,而java呢,java则可以通过反射机制 ...
- 初入c++(三)this指针,友元函数,友元类
1.c++中的this指针 指向当前对象,通过它可以访问当前对象的所有成员.当前对象就是正在使用的对象: 在类的内部使用,可以访问所有的成员,public,private,protect this只能 ...
- C++友元函数、友元类与类模板
文章目录 一.普通函数声明为友元涵数 二.声明类的成员函数为其他类的友元函数 三.类模板的使用 一.普通函数声明为友元涵数 #include <iostream> using namesp ...
最新文章
- 中文latex去掉图片描述
- Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hos
- 贝叶斯定理与贝叶斯估计
- 16 --删除排序数组中的重复项
- python Authentication plugin ‘caching_sha2_password‘ is not supp
- 25+ 个单色背景的网页设计实例
- Head First设计模式读书笔记六 第七章上 适配器模式
- centos桌面系统使用记录
- ofdma技术_数字化领航 | Wi-Fi 6 关键技术剖析
- 树莓派安装TeamViewer
- DSP技术:基于TMS320F28027芯片的温度测量系统
- 国军标要求的产品“六性”到底是什么?
- 数学之美:余弦定理和新闻分类
- 简单处理点击EditText外部区域关闭软键盘
- Bootstrap(三) 网格系统
- 众里寻它千百度,原来它在...MSDN处
- 如何表示Unicode的字符?
- download and build swe
- true在php中代表,true是什么意思
- 菜鸟与 cef 的邂逅之旅(三):Cef3 中 C++ 与 JavaScript 的互相调用