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

相关文章
|
5月前
|
C++
32 C++ - 运算符重载碰上友元函数
32 C++ - 运算符重载碰上友元函数
20 0
|
1月前
|
安全 编译器 程序员
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用(一)
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用
31 1
|
3月前
|
存储 算法 C语言
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)
一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的
69 0
|
5天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
12天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
1月前
|
设计模式 缓存 编译器
【C++友元函数】深入探索C++友元函数:从基础到应用
【C++友元函数】深入探索C++友元函数:从基础到应用
44 0
|
1月前
|
自然语言处理 安全 程序员
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用(二)
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用
26 0
|
2月前
|
C++
【c++】友元
【c++】友元
【c++】友元
|
2月前
|
C++
C++类与对象【友元】
C++类与对象【友元】
|
3月前
|
C++
c++类与对象(五):友元、内部类、临时对象、匿名对象
c++类与对象(五):友元、内部类、临时对象、匿名对象
22 0