您的位置:首页 > 教程笔记 > 综合教程

C++ 友元函数详解:友元函数和成员函数的区别?

2024-04-29 16:05:29 综合教程 118

友元函数允许外部函数访问类中的私有或受保护成员,通过在类定义中用 friend 关键字声明。与成员函数不同,友元函数声明在类外部,可访问类的私有和保护成员,而成员函数在类内部声明,可访问类所有成员。友元函数用作普通函数调用,而成员函数用类对象调用,在需要外部访问私有或受保护成员时使用友元函数,在类内部使用成员函数时使用成员函数。

C++ 友元函数详解:友元函数与成员函数的区别

友元函数

友元函数是一种允许外部函数访问类中的私有和保护成员的特殊函数。它通过在类定义中使用 关键字声明。

语法:

class MyClass {
  friend void myFriendFunction();
  ...
};

成员函数

成员函数是属于类的函数,可以访问其私有和保护成员。

语法:

class MyClass {
  void myMemberFunction();
  ...
};

友元函数和成员函数的区别

特征 友元函数 成员函数 可访问性 可以访问类的私有和保护成员 可以访问类的所有成员 声明位置 在类外部 在类内部 作用域 全局 类内部 调用方式 像普通函数一样调用 使用类对象调用

实战案例

考虑一个 类,它具有私有的 成员:

class Student {
private:
  int marks;
  ...
};

我们可以使用友元函数 来计算学生的平均成绩,该函数可以访问 :

// 友元函数
friend double calculateAverage(Student& student);

// 计算学生的平均成绩
double calculateAverage(Student& student) {
  return student.marks / 3;
}

我们也可以使用成员函数来计算平均成绩,但它只能在 类中使用:

// 类的成员函数
double getAverage() {
  return marks / 3;
}

友元函数提供了一种机制,允许外部函数访问类的私有和保护成员,而不需要使这些成员对外部世界可见。成员函数可以访问类的所有成员,但只能在类内部使用。

相关推荐

  • C++ 虚拟函数与元编程:突破编译时限制的利器

    C++ 虚拟函数与元编程:突破编译时限制的利器

    虚拟函数和元编程是 c++++ 中克服编译时限制的利器,可实现复杂且可扩展的代码。虚拟函数支持多态,元编程允许在编译时操作和生成代码。通过结合使用它们,我们可以创建通用数据结构、动态生成代码等等,从而

    综合教程 2024-04-29 16:05:27 35
  • C++ 虚拟函数与多线程:探索并行编程中的多态挑战

    C++ 虚拟函数与多线程:探索并行编程中的多态挑战

    在多线程环境中使用虚拟函数可能会导致竞争条件,出现数据损坏或未定义行为。解决方案:1. 使用互斥锁保护共享资源。2. 每个线程在调用虚拟函数前获取互斥锁,确保并发安全。C++ 虚拟函数与多线程:揭开并

    综合教程 2024-04-29 16:05:26 33
  • golang函数类型的序列化与反序列化

    golang函数类型的序列化与反序列化

    golang 函数类型可通过 encoding/gob 包实现序列化和反序列化。序列化:注册自定义类型并使用 gob.newenr 将函数类型编码为字节数组。反序列化:使用 gob.newde

    综合教程 2024-04-29 16:05:25 68
  • C++ 虚拟函数深入剖析:类型擦除与多态实现

    C++ 虚拟函数深入剖析:类型擦除与多态实现

    c++++虚函数实现多态,通过类型擦除将对象类型信息分离,使编译器仅识别公共接口。虚指针表存储虚函数地址,当基类指针指向派生类对象时,指向派生类虚指针表的派生类指针将替代基类指针指向的虚指针表,从而实

    综合教程 2024-04-29 16:05:23 120
  • golang函数的未来人才培养

    golang函数的未来人才培养

    培养 golang 函数式编程人才至关重要,为此需要:深入理解函数式编程原理动手实践练习使用函数式编程工具和库设定需要函数式编程技能的项目和挑战Golang 函数的未来人才培养随着 Golang 生态

    综合教程 2024-04-29 16:05:22 98