C++中的友元和友元函数

简介: C++中的友元和友元函数

目录

友元的定义

友元的好处

友元函数初识

友元函数的定义


友元的定义

类中的主要特点就是数据的隐藏以及它的封装,就是类中的私有成员,只能在内定义的范围中使用,换句话来说就是私有成员就只能通过他的成员函数来访问,但是平时我们访问类的私有成员时,需要在程序中一次或者多次的调用成员函数,,这样就会使得调用的函数越次数越来越多,空间的开销和时间的开销也会越来越大,从而降低我们程序的运行效率

友元的好处

为了解决以上的问题,C加加特别提供了一种特殊的访问私有成员的途径,这种方法在不放弃所有成员的数据安全情况下,即封装性,像一个普通的函数或者类中的成员,函数可以访问到某一类信息中,在C加加中用有源作为实现这个条件的一种辅助手段,居家家中的有缘为数据隐藏以及封装性,这堵密不透风的墙开了一个小孔,外界可以通过有源函数这个小孔窥探类内部的秘密,所以来说,有缘就是一种可以通向私有成员的后门

友元函数初识

友元函数是可以不属于任何类的非成员函数,他也可以是另一个类的成员文书,虽然友元函数,可能不是当前类的成员函数,但是它可以访问该类中的所有成员,包括私有成员保护成员和共有成员三大部分

友元函数的定义

在类中声明友元函数时,需要在它的函数名前加上关键字friend,该声明既可以放在私有部分,也可以放在公有部分也可以保护部分。友元函数可以定义在类的内部,也可以定义在类的外部

下面举一个将非成员函数声明为友元函数的例子:

#include <iostream>
using namespace std;
class A {
public:
  A(int n,int s) {
    num = n;
    score = s;
  }
  void showscore() {
  }
  friend int score_get(A &ob) {
    return (int)(ob.score / ob.num);
  }
private:
  int num, score;
};
int main() {
  A obj[3] = {
    A(3,300),
    A(4,450),
    A(5,480)
  };
  for (int i = 0; i < 3; i++) {
    cout << score_get(obj[i]) << endl;
  }
  return 0;
}

输出结果:

100

112

96

相关文章
|
1月前
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
19 1
|
1月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
19 1
|
1月前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
1月前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
20 0
|
2月前
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
|
4月前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
|
4月前
|
编译器 数据安全/隐私保护 C++
C++一分钟之-属性友元与访问控制
【7月更文挑战第9天】C++中的友元机制允许非成员函数或类访问私有和保护成员,打破了封装性。友元需在类内声明,常见的错误包括忘记声明、过度使用及误解友元的非继承性。要避免错误,应明确声明友元,限制其使用,并理解其局限。示例展示了如何声明和使用友元函数来访问私有数据。谨慎使用友元以保持代码的健壮性和可维护性。
38 1
|
5月前
|
C++
C++核心技术要点《友元函数,友元类》
C++核心技术要点《友元函数,友元类》
54 3