0

0

C++如何重载运算符_C++面向对象编程中操作符重载的规则与实践

穿越時空

穿越時空

发布时间:2025-11-25 14:53:44

|

556人浏览过

|

来源于php中文网

原创

运算符重载是C++中为自定义类型赋予运算符新含义的机制,通过定义如operator+、operator==等特殊函数实现。必须遵循已有运算符、至少一个操作数为用户类型、部分运算符需成员函数重载等规则。例如Complex类可重载+、==和

c++如何重载运算符_c++面向对象编程中操作符重载的规则与实践

在C++面向对象编程中,操作符重载是一种让自定义类型(如类)能够像基本数据类型一样使用运算符的机制。通过重载,我们可以为类对象定义加法、赋值、比较等操作的行为,使代码更直观、易读。

什么是运算符重载

运算符重载允许我们为已有的运算符赋予新的含义,适用于用户自定义类型。比如,可以让两个Point对象通过+相加,或让String对象支持==比较。

重载的本质是编写一个特殊函数,函数名由operator关键字和运算符组成,例如operator+operator==

运算符重载的基本规则

重载运算符不是随意定义的,必须遵循一些语言规定的准则:

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

  • 只能重载C++已有的运算符,不能创建新符号,如不能定义***@
  • 以下运算符不能被重载:.(成员访问)、.*(成员指针访问)、::作用域解析)、?:(三目条件)、sizeof
  • 重载运算符至少有一个操作数是用户自定义类型
  • 部分运算符(如=()[]->)必须作为类的成员函数重载
  • 其他运算符可以作为成员函数或全局函数重载,通常建议对称操作(如+、==)用全局函数实现

常见运算符重载示例

以一个简单的Complex(复数)类为例,展示几种常用重载方式:

GAIPPT
GAIPPT

AI PPT制作和美化神器

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

// 全局函数重载 ==,需声明为友元
friend bool operator==(const Complex& a, const Complex& b);

// 重载输出流 <<,必须为全局函数
friend std::ostream& operatorzuojiankuohaophpcnzuojiankuohaophpcn(std::ostream& os, const Complex& c);

};

// 定义全局比较操作 bool operator==(const Complex& a, const Complex& b) { return a.real == b.real && a.imag == b.imag; }

// 输出流重载 std::ostream& operator

这样就可以写出自然的表达式:

Complex a(3, 4), b(1, 2);
Complex c = a + b;
if (a == b) { /* ... */ }
std::cout << c << std::endl;

赋值运算符与拷贝控制

operator= 是特殊的重载函数,用于处理对象赋值。如果类管理资源(如动态内存),必须显式定义拷贝赋值运算符,否则编译器生成的默认版本可能引发浅拷贝问题。

良好的赋值重载应:

  • 检查自赋值(this == &other
  • 释放原有资源
  • 复制新数据
  • 返回*this以支持链式赋值(如 a = b = c)

注意:现代C++推荐使用“拷贝并交换”惯用法,或直接依赖RAII和智能指针来简化资源管理。

基本上就这些。只要理解规则,结合实际需求合理重载,就能写出清晰高效的类接口。

相关专题

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

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

301

2023.10.31

php数据类型
php数据类型

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

222

2025.10.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

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

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

55

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

49

2025.11.27

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

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

1

2026.01.14

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

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

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