c++ 友元函数

在 C++ 中,友元函数是指在一个类的声明或定义中声明的非成员函数,该函数被授予了访问该类的私有成员和保护成员的权限。这意味着友元函数可以访问该类中的私有和保护成员,尽管它不是类的成员函数。

友元函数的存在是为了提供一种特殊的访问控制机制,允许一些外部函数访问某个类的私有成员,但同时又不是类的成员函数。这在某些情况下可能很有用,例如在实现一些操作符重载时,需要对类的私有成员进行操作,但又不想将操作符重载函数直接定义为类的成员函数。

友元函数的声明需要在类的声明或定义中使用 friend 关键字进行声明。这样一来,友元函数就能够在实现细节中访问该类的私有和保护成员。

复制代码
#include <iostream>

class Complex {
private:
    double real;
    double imag;

public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    // 声明友元函数
    friend std::ostream& operator<<(std::ostream& out, const Complex& c);

    // getter 函数
    double getReal() const { return real; }
    double getImag() const { return imag; }
};

// 定义友元函数
std::ostream& operator<<(std::ostream& out, const Complex& c) {
    out << "(" << c.getReal() << ", " << c.getImag() << "i)";
    return out;
}

int main() {
    Complex c1(3.5, 2.5);
    Complex c2(1.2, 4.8);

    // 使用 << 运算符打印复数对象
    std::cout << "c1 = " << c1 << std::endl;
    std::cout << "c2 = " << c2 << std::endl;

    return 0;
}
相关推荐
t***5443 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
CoderCodingNo3 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
kongba0074 小时前
项目打包 Python Flask 项目发布与打包专家 提示词V1.0
开发语言·python·flask
froginwe114 小时前
C 语言测验
开发语言
极客智造5 小时前
深入详解 C++ 智能指针:RAII 原理、分类特性、底层机制与工程实战
c++·智能指针
今夕资源网5 小时前
powershell工具包 安装升级脚本并设置UTF-8 环境快捷方式创建 将powershell的编码默认改为UTF-8
开发语言·utf-8·powershell·utf-8编码·powershell7·powershell5·设置utf-8编码
机器视觉知识推荐、就业指导5 小时前
Qt:真正的门槛不是入门,而是维护
开发语言·qt
hhb_6185 小时前
Dylan 语言核心特性与工程实践深度解析
开发语言·c#
王璐WL6 小时前
【C++】类的默认成员函数(上)
c++
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:区间覆盖(加强版)
c++·算法·贪心·csp·信奥赛·区间贪心·区间覆盖(加强版)