0

0

c++中如何重载运算符_c++运算符重载方法

穿越時空

穿越時空

发布时间:2025-09-27 09:21:01

|

296人浏览过

|

来源于php中文网

原创

运算符重载允许为类或结构体重新定义+、-、==等运算符行为,使对象能像基本类型一样进行操作。

c++中如何重载运算符_c++运算符重载方法

在C++中,运算符重载是一种允许我们为自定义类型(如类或结构体)重新定义已有运算符行为的机制。通过运算符重载,我们可以让对象像基本数据类型一样使用+、-、==、

1. 运算符重载的基本语法

运算符重载本质上是函数重载的一种形式,使用关键字 operator 后跟要重载的符号来定义函数。

基本语法如下:

返回类型 operator符号(参数列表) {
    // 实现逻辑
}

例如,重载加法运算符:

立即学习C++免费学习笔记(深入)”;

class Complex {
public:
    double real, imag;
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}
// 成员函数方式重载 +
Complex operator+(const Complex& other) const {
    return Complex(real + other.real, imag + other.imag);
}

};

Interior AI
Interior AI

AI室内设计,上传室内照片自动帮你生成多种风格的室内设计图

下载

2. 成员函数 vs 友元函数重载

运算符可以作为成员函数友元函数重载,选择取决于具体场景。

成员函数重载:

  • 适用于左操作数是当前类对象的情况
  • 隐含 this 指针作为第一个参数
  • 适合重载 +=、-=、[]、()、= 等必须作为成员的运算符

友元函数重载:

  • 可以访问类的私有成员
  • 两个操作数都可以进行隐式转换
  • 常用于重载 > 和对称性操作如 +、==

示例:用友元函数重载

class Complex {
    double real, imag;
public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}
friend std::ostream& operator<<(std::ostream& out, const Complex& c);

};

std::ostream& operator

3. 常见可重载运算符示例

以下是一些常用运算符的重载方式:

赋值运算符 =

需要手动实现深拷贝,防止资源重复释放。

Complex& operator=(const Complex& other) {
    if (this != &other) {
        real = other.real;
        imag = other.imag;
    }
    return *this;
}

比较运算符 ==

bool operator==(const Complex& other) const {
    return real == other.real && imag == other.imag;
}

下标运算符 []

必须作为成员函数,常用于数组类封装。

int& operator[](int index) {
    return data[index];  // 假设 data 是内部数组
}

4. 注意事项与限制

  • 不能创建新的运算符,只能重载已有的(如不能定义 **)
  • 以下运算符不能重载::: . .* ?: sizeof typeid alignof
  • 重载后操作符的优先级和结合性不变
  • 至少有一个操作数是用户定义类型
  • 尽量保持语义一致性,避免滥用导致代码难懂

基本上就这些。掌握运算符重载能显著提升类的可用性和自然性,但应合理使用,避免过度“炫技”影响可维护性。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

301

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

85

2025.10.17

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

195

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

187

2025.07.04

Go语言实现运算符重载有哪些方法
Go语言实现运算符重载有哪些方法

Go语言不支持运算符重载,但可以通过一些方法来模拟运算符重载的效果。使用函数重载来模拟运算符重载,可以为不同的类型定义不同的函数,以实现类似运算符重载的效果,通过函数重载,可以为不同的类型实现不同的操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

191

2024.02.23

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 6.7万人学习

C 教程
C 教程

共75课时 | 4万人学习

C++教程
C++教程

共115课时 | 12.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号