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;
}
相关推荐
java资料站3 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天4 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙4 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂5 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i5 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网5 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术5 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
八解毒剂5 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
FakeOccupational6 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
打工仔折腾 AI6 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战