c++友元函数是什么 c++ friend关键字用法【教程】

21次阅读

友元函数是c++中可访问类私有和保护成员的非成员函数,需用friend在类内声明、定义时不加friend,无this指针、不可继承、不可用constStatic修饰。

c++友元函数是什么 c++ friend关键字用法【教程】

友元函数是C++中一种可以访问类私有(private)和保护(protected)成员的非成员函数,它不隶属于该类,也不受访问控制限制,但必须由类显式声明为“朋友”——用friend关键字在类内部声明。

友元函数的核心特点

它不是类的成员,没有this指针;不能被继承;不能用conststatic修饰;声明时加friend,定义时**不加**friend;可定义在类内(隐式内联)或类外(需提前声明)。

c++友元函数是什么 c++ friend关键字用法【教程】

Sora

Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。

c++友元函数是什么 c++ friend关键字用法【教程】 538

查看详情 c++友元函数是什么 c++ friend关键字用法【教程】

如何声明和定义友元函数

  • 在类内部用friend声明函数原型(含返回类型、名字、参数列表)
  • 该函数可在类外单独定义,像普通函数一样实现
  • 若函数在类内定义,则自动成为内联函数,且仍需写friend

示例:

class Box { private:     double width = 10.5; public:     friend void printWidth(const Box& b); // 声明友元 };  void printWidth(const Box& b) { // 定义:不写 friend     std::cout << "Width: " << b.width; // 可直接访问 private 成员 }

常见使用场景

  • 重载输入输出运算符:如operator常需访问私有数据,又不能是成员(左操作数是<code>std::ostream
  • 两个类之间的深度协作:比如Matrix类允许Vector类的某个函数直接读取其内部数组
  • 简化调试或日志函数:快速打印私有状态,避免为每个字段写get接口

注意事项与潜在风险

  • 破坏封装性——友元绕过了访问控制,应仅在必要时使用
  • 友元关系不可传递、不可继承、不具有对称性(A是B的友元,不意味B是A的友元)
  • 头文件中声明友元函数时,若其实现依赖其他类,注意包含顺序和前置声明

text=ZqhQzanResources