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++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
222 0
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
252 2
|
8月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
436 6
|
12月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
293 5
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
123 2
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
142 1
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
134 0