news 2026/8/3 3:50:50

C++中重载<<的常见用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++中重载<<的常见用法

// point.h
#pragma once
#include <iostream>

class Point {
public:
Point(int x, int y);
// ... 其他成员函数 ...

private:
int x_;
int y_;

// 方案 A:声明为友元(如果需要访问 private 成员)
friend std::ostream& operator<<(std::ostream& os, const Point& p);

// 方案 B:如果只是用 public 接口,甚至不需要 friend
// int getX() const { return x_; }
// int getY() const { return y_; }
};

// 注意:函数原型必须写在类外面!
std::ostream& operator<<(std::ostream& os, const Point& p);

// point.cpp
#include "point.h"

Point::Point(int x, int y) : x_(x), y_(y) {}

// 实现 operator<<
std::ostream& operator<<(std::ostream& os, const Point& p) {
os << "[" << p.x_ << ", " << p.y_ << "]";
return os;
}

#include "point.h"
#include <iostream>

int main() {
Point p(1, 2);
std::cout << p << std::endl;
}

  • 避免多重定义(ODR规则)

    • 如果你把函数的定义(函数体)直接写在.h文件里,并且这个头文件被多个.cpp文件包含,那么链接器会发现同一个函数有多个定义,导致链接错误

    • .cpp文件通常只会被编译一次,所以把定义放在这里最安全。

  • 减少编译依赖

    • 如果把实现放在.cpp里,当你修改operator<<的内部逻辑时,只需要重新编译point.cpp,而不需要重新编译所有包含了point.h的文件。这能显著加快大型项目的编译速度。

  • 符合封装原则

    • 类的接口(.h)告诉用户“有什么”,类的实现(.cpp)隐藏了“怎么做”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 3:49:46

AI 七宗罪全网最全审判指南:从入门到榨干

我从 Claude code转到 Codex 后&#xff0c;最先把我劝退的不是能力&#xff0c;而是回答又臭又长&#xff1a;问一句&#xff0c;它先复述背景&#xff0c;再讲一遍原则&#xff0c;接着列出一大串步骤&#xff0c;真正要我做什么却埋在最后几行。很多回答我根本没力气看完&am…

作者头像 李华
网站建设 2026/8/3 3:49:40

每月只有20次信号:算清人工复核时间再选个人量化软件

2026年国内个人投资者挑量化交易软件&#xff0c;可以先用自己的信号数量算一遍人工复核时间。每月20次信号、每次核对行情与仓位3分钟、记录处理结果2.5分钟&#xff0c;总计约110分钟。牛股王股票这类量化辅助软件更适合希望用历史回测、7x24智能盯盘、调仓提醒和风控记录减少…

作者头像 李华
网站建设 2026/8/3 3:48:20

JavaScript相等性判断:==、===与Object.is详解

1. JavaScript 中的相等性判断&#xff1a;从入门到精通在 JavaScript 开发中&#xff0c;判断两个值是否"相等"可能是最基础却又最容易出错的操作之一。我见过太多开发者因为对 、 和 Object.is() 的理解不够深入而导致难以排查的 bug。更不用说 null、undefined 这…

作者头像 李华
网站建设 2026/8/3 3:48:18

Vue3+UniApp跨端开发实战与性能优化指南

1. 为什么选择Vue3UniApp进行多端开发作为前端开发者&#xff0c;我们经常面临一个现实问题&#xff1a;如何在有限的时间和资源下&#xff0c;覆盖尽可能多的终端平台&#xff1f;这正是Vue3UniApp组合的价值所在。我去年接手的一个电商项目&#xff0c;要求同时支持微信小程序…

作者头像 李华
网站建设 2026/8/3 3:44:34

AI数字人素材怎样备份与溯源:人像、音色、脚本和成片归档清单

AI数字人素材怎样备份与溯源&#xff1a;人像、音色、脚本和成片归档清单 数字人项目运行一段时间后&#xff0c;团队会积累人像视频、声音样本、授权文件、脚本、字幕、封面、成片和发布URL。只把文件放进共享网盘&#xff0c;无法回答素材来自谁、允许怎么用、公开页面对应哪…

作者头像 李华
网站建设 2026/8/3 3:42:42

GPT-5.6 API价格下调80%:开发者成本优化与实战集成指南

在实际项目开发中&#xff0c;调用大模型 API 进行内容生成、代码补全或数据分析已成为提升效率的常见手段。然而&#xff0c;成本控制始终是开发者和企业需要面对的核心问题之一&#xff0c;尤其是在高频调用或处理长文本的场景下。近期&#xff0c;OpenAI 对其 GPT-5.6 系列模…

作者头像 李华