C++友元函数 普通函数声明为友元函数
友元函数
如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数),在对本类进行声明时,在类体中用friend对该函数进行声明,此函数就称为本类的“友元函数”。一个类的友元函数可以访问这个类中的私有成员。
例如,定义一个func()函数,在C++的TestA类中声明func()函数是当前类的“友元”函数,那么,这个func()函数就可以访问TestA类的私有成员。
2.1 普通函数声明为友元函数
我们可以定义一个普通的函数,希望这个函数能够访问一个类中的成员变量,那么,我们就在定义类的时候,声明这个函数是该类的友元函数,相当是说:在定义类的时候,把该普通函数声明为自己的一个朋友,允许这个朋友访问自己的成员变量。
这样,一个函数可以被多个类声明为“朋友”,它可以访问多个类中的成员变量。
通过下面的例子,可以理解友元函数的性质和作用。如下是一个友元函数的测试例子:
程序运行结果如下:
可以看到,在print()函数中可以引用stud对象的private私有成员。是因为,print()函数在student类中声明为友元。
请注意print()是一个在类外定义的函数,它不是属于student类的一个函数,所以,在定义的时候,并没有使用类前缀。它是非成员函数,不属于任何类。但是,我们把它声明为student类的一个“朋友”,让它可以访问student类的私有成员变量。
所以,使用 friend 关键字,在student类中声明定义在别处的print() 函数为student类的一个友元,这样,print() 是student类的朋友,就可以访问它的私有成员变量。
注意:在print() 中访问私有成员变量的时候,必须加上“对象名”,不能够如下:
void print(student& s)//定义友元函数
{
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
}
因为,print() 不是student类中的一个成员函数,它只是student类的一个朋友。不能够默认引用student类的成员变量,必须指定要访问的对象。
C++友元函数 普通函数声明为友元函数相关推荐
- c语言中被调用函数只需在主调函数中声明,其他函数中不用声明,求助,函数在其他函数中使用时要先声明后调用,这个没声明就用了...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如题,程序如下: #include #include //malloc,calloc,free,realloc头文件 #define LEN sizeof ...
- C++ 哪些函数不能声明成虚函数
在C++,有五种函数不能被声明成虚函数,分别是:非成员函数.构造函数.静态成员函数.内联成员函数.友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数. 1. 非成员函数 非成员函数只能被重 ...
- C++不能被声明为虚函数
虚函数是为了实现多态,但是显然并不是所有函数都可以声明为虚函数的. 不能被声明为虚函数的函数有两类: 不能被继承的函数 不能被重写的函数 因此,这些函数都不能被声明为虚函数 普通函数 构造函数 如果构 ...
- 为什么基类的析构函数要声明成虚函数
记得以后基类(父类) 的析构函数最好是声明为 虚函数 即:virtual 开发中遇到了一个比较傻逼的bug,也证明了理论与实际之间的差距. 在基类中没有声明其析构函数为虚函数,导致delete 释放操 ...
- 友元函数、类的非静态成员函数、静态成员函数的区别
类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...
- 普通函数被类引用为友元函数
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; cl ...
- 【C++ 基础篇:21】:friend 友元四连问:什么是友元?友元类?友元函数?什么时候用友元?
本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...
- 模板 (函数模板语法 ,类模板与函数模板的区别,:函数模板案例,普通函数与函数模板的区别,普通函数与函数模板调用规则,模板的局限性,类模板分文件编写.cpp,Person.hpp,类模板与友元)
**01:函数模板语法: #include<iostream> using namespace std;//交换两个整型函数 void swapInt(int &a ,int &a ...
- C++ - 模板函数须要类型转换时使用友元(friend)模板函数
模板函数须要类型转换时使用友元(friend)模板函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24357301 非模板函数 ...
最新文章
- 群同态基本定理证明_近世代数(3)——群的基本性质
- 《3ds Max疯狂设计学院》——1.5节怎样才能学好3ds Max,你要听好
- Cronet android 设计与实现分析——备选服务机制
- 理论基础 —— 排序 —— 桶排序
- cactiez v11使用配置mysql_cactiez应用监控部署手册.doc
- 1106 Lowest Price in Supply Chain (25 分) 静态树vector+DFS
- 荐书丨《哥德尔、艾舍尔、巴赫书:集异璧之大成》:机器人与音乐的次元壁破了
- 算法竞赛入门经典(刘汝佳)——常用STL数据结构总结
- python柱状图颜色_Python 绘制 柱状图
- 【量化笔记】时间序列--ARCH模型及GARCH模型
- Gboard导入简体中文词库,详细操作教程。
- 计算机控制技术课程配套教材习题解答(第4、5章)
- ICC tie cells
- c语言的七大查找算法,非常值得学习
- Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
- h5分页样式 css,【前端技术】Quasar Table: 自定义分页样式
- 自然语言理解(Natural Language Understanding)
- 单摆matlab建模,用matlab求解单摆模型
- 大内高手--对内存的认识与使用
- iphone怎么使用排水功能?这项功能在哪