C++ 中的友元函数和示例用例
已发表: 2022-10-22数据隐藏是一种基本的软件开发技术,广泛用于面向对象的编程语言 (OOP)。 它限制从类外部访问私有数据成员。 但是,称为友元函数的 C++ 特性违背了数据隐藏原则。
在本文中,您将了解什么是 C++ 中的友元函数,什么是友元类,并通过示例探索一些用例。
查看我们的免费技术课程,以获得竞争优势。
C++中的友元函数是什么?
C++ 中的友元函数是在类外部声明的函数,但可以访问类的私有成员和受保护成员。 尽管非成员函数无法访问特定类的私有成员,但将它们声明为友元函数可以让它们访问类的私有成员和受保护成员。
查看 upGrad 的 DevOps 高级认证
朋友功能的特点
C++中的友元函数具有以下特点:
- 友元函数超出了它被声明为友元的类的范围
- 友元函数可以是类的成员,也可以是在类范围之外声明的函数
- 朋友功能不限于单个班级。
探索我们流行的软件工程课程
LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
全栈开发训练营 | 区块链中的 PG 程序 |
全栈开发中的执行 PG 计划 | |
在下面查看我们的所有课程 | |
软件工程课程 |
- 调用友元函数就像调用类的任何普通函数而不使用对象
- 我们不能使用对象调用朋友函数,因为它不在类的范围内
- C++ 中的友元函数将对象作为参数
- 我们可以在私有或公共部分声明一个友元函数
- 成员名称不能直接访问友元函数,它必须使用点成员运算符和对象名称与成员名称
查看 upGrad 的网络安全高级认证
Friend 函数的语法
要声明朋友函数,我们在类的主体中使用friend关键字。 友元函数的语法是:
类类名 {
…………
朋友returnType functionName(arg list);
…………
}
急需的软件开发技能
JavaScript 课程 | 核心 Java 课程 | 数据结构课程 |
Node.js 课程 | SQL 课程 | 全栈开发课程 |
NFT 课程 | DevOps 课程 | 大数据课程 |
React.js 课程 | 网络安全课程 | 云计算课程 |
数据库设计课程 | Python 课程 | 加密货币课程 |
如果我们分解语法,以下是每个术语的含义:
- friend是表示该函数是友元函数的关键字
- returnType是函数的返回类型
- functionName是与该类成为朋友的函数名称
- arg list是我们将传递的参数
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
C++ 友元函数的示例
现在,让我们看一些程序来说明朋友功能。
示例 1:打印盒子高度的 C++ 友元函数
#include <iostream>
使用命名空间标准;
类框
{
私人的:
整数高度;
上市:
盒子():高度(0){}
朋友 int printHeight(Box); //好友函数
};
int printHeight(框 h)
{
h.高度 += 40;
返回h.height;
}
主函数()
{
方框 h;
cout<<“盒子的高度:”<< printHeight(h)<<endl;
返回0;
}
阅读我们与软件开发相关的热门文章
如何在 Java 中实现数据抽象? | Java中的内部类是什么? | Java 标识符:定义、语法和示例 |
通过示例了解 OOPS 中的封装 | C 中的命令行参数解释 | 2022 年云计算的 10 大特点和特点 |
Java 中的多态性:概念、类型、特征和示例 | Java 中的包以及如何使用它们? | Git 初学者教程:从零开始学习 Git |
输出:
箱高:40
示例 2:当 C++ 友元函数对两个类友好时
#include <iostream>
使用命名空间标准;
// 前向声明
Q 类;
类 ClassP {
上市:
// 将 numP 初始化为 12 的构造函数
ClassP() : numP(12) {}
私人的:
整数 numP;
// 友元函数声明
朋友 int add(ClassP, ClassQ);
};
类 Q {
上市:
// 将 numQ 初始化为 1 的构造函数
ClassQ() : numQ(1) {}
私人的:
整数 numQ;
// 友元函数声明
朋友 int add(ClassP, ClassQ);
};
// 访问两个类的成员
int add(ClassP objectP, ClassQ objectQ) {
返回(objectP.numP + objectQ.numQ);
}
int main() {
P类对象P;
ClassQ objectQ;
cout << “总和:” << add(objectP, objectQ);
返回0;
}
输出:
总和:13
在上面的例子中,P 类和 Q 类将 add()声明为友元函数,使其能够访问这两个类的私有数据。 此外,P 类中的友元函数正在使用 Q 类。
因此,我们在程序中对 Q 类进行了前向声明。
实现朋友功能
为了更好地了解 C++ 中的友元函数,我们现在将研究实现友元函数的两种方法。
- 通过另一个类的方法在 C++ 中实现友元函数
当我们需要访问另一个已被声明为友元的类的私有成员和受保护成员时,我们在 C++ 中声明友元类。 也可以将另一个类的单个成员函数声明为友元。
类 类名
{
朋友类friend_class;//声明朋友类
};
班级朋友班
{
};
在上面的朋友类声明中, friend_class中的所有函数都是class_name的朋友函数。
下面通过一个简单的例子来说明通过另一个类的方法实现友元函数:
#include <iostream>
使用命名空间标准;
A级
{
诠释 p = 4;
B类朋友; //好友类
};
B类
{
上市:
无效显示 (A &a)
{
cout<<”p的值为:” <<ap;
}
};
主函数()
{
一个;
乙乙;
- 显示(一);
返回0;
}
输出:
p的值为:4
- 实现一个全局函数
实现一个全局友元函数让我们可以访问全局类声明的所有受保护和私有成员。 这是一个例子:
#include<iostream>
使用命名空间标准;
课堂空间
{
诠释一个;
诠释 b;
诠释 c;
上市:
无效的setdata(int x,int y,int z);
无效显示(无效);
朋友 void 运算符-(空格 &s);
};
空白空间 ::setdata (int x, int y, int z)
{
a=x; b=y; c=z;
}
空白空间::显示(空白)
{
cout<<a<<” “<<b<<” “<<c<<“\n”;
}
void 运算符-(空格 &s)
{
萨=-萨;
某人=-某人;
sc = - sc;
}
主函数()
{
空间 s;
- 设置数据(9,2,3);
cout<<“s:”;
- 展示 ();
-s;
cout<<“-s:”;
- 展示 ();
返回0;
}
输出:
年代:9 2 3
-s:-9 -2 -3
在上面的示例程序中, operator-是我们在类范围内全局声明的友元函数。
什么是 C++ 中的朋友类?
虽然现在已经很明显了,朋友类是一个可以访问被声明为朋友的类的私有成员和受保护成员的类。
简单来说,当我们希望一个类能够访问另一个类的私有成员和受保护成员时,使用 C++ 中的友元类。
我们声明为另一个类的友元的类的成员函数是友元类的友元函数。 因此,友元函数链接了这两个类。
Friend 类的语法
这是 C++ 中友元类的语法:
R类; //前向声明
P类{
// 其他声明
朋友等级R;
};
R类{
// 声明
};
在上图中,R 类是 P 类的朋友。因此,R 类可以访问 P 类的私有数据成员。但是反过来不成立,P 类不能访问 R 类的私有数据成员.
此外,前向声明用于在实体被分类定义之前通知编译器实体的存在。 在这里,我们使用前向声明来声明 Class R 以通知编译器它的存在。 前向声明允许我们在 P 类中使用 R 类的对象。
C++中友元函数有什么用?
总结一下我们的讨论,让我们看一下 C++ 中友元函数的两个主要用途:
- 首先,当我们想要访问一个类的私有成员和受保护成员时,我们使用朋友函数。 为此,我们通常会要求该类的对象访问私有成员和受保护成员。 但是,朋友函数消除了函数需要成为类成员才能获得访问权限的情况。
- C++ 中友元函数的另一个用途是运算符重载。 具有相同名称但不同编号和参数的函数称为重载函数。 C++ 中的友元函数可用于运算符重载。
在这种情况下,运算符重载函数在friend关键字之前并声明了一个函数类范围。 当被友元函数重载时,二元运算符采用两个显式参数,而一元运算符采用一个参数。 它的工作方式与二元运算符函数相同,只是友元运算符函数实现发生在类范围之外。
这使我们对C++ 中的友元函数及其用途的讨论结束。 希望这可以帮助您进一步了解 C++。
此外,如果您希望以全栈开发人员的身份开始您的职业生涯, upGrad与 IIIT 班加罗尔合作,提供完全在线的软件开发高管研究生课程 - 为期 13 个月的全栈开发专业化。
节目亮点:
- 亲身接触行业相关案例研究和作业
- 450 多个小时的 360 度学习
- 10 多种顶级编程工具和语言
- 与行业导师的 1:1 职业指导会议
- 24/7 学生支持
立即注册,立即获得独家 upGrad 福利!
C++中的友元函数是什么?
C++ 中的友元函数是一个不是类成员但可以访问其私有成员和受保护成员的函数。
你如何声明一个朋友函数?
友元函数可以访问类的私有和受保护数据。 要声明一个朋友函数,我们在类的主体中使用friend关键字。
如何在 C++ 中结交班上的朋友?
我们使用friend关键字将一个类声明为C++中的友元类。 该关键字允许任何类访问其他类和函数的私有和受保护成员。