C++ 关系运算符重载和算术运算符重载的例子,运算符重载必须以operator开头

news/2025/3/26 5:35:59/

在C++中,运算符重载允许为用户定义的类型(类或结构体)赋予某些内置运算符的功能。下面是一个关于关系运算符重载(==)和算术运算符重载(+)的简单例子。

示例:复数类的运算符重载

将创建一个表示复数的类,并为其重载==和+运算符。

【cpp】
#include
using namespace std;

class Complex {
private:
double real;
double imag;

public:
// 构造函数
Complex(double r = 0.0, double i = 0.0) : real®, imag(i) {}

// 重载关系运算符 ==
bool operator==(const Complex& other) const {return (real == other.real && imag == other.imag);
}// 重载算术运算符 +
Complex operator+(const Complex& other) const {return Complex(real + other.real, imag + other.imag);
}// 用于打印复数
void print() const {if (imag < 0)cout << real << " - " << -imag << "i" << endl;elsecout << real << " + " << imag << "i" << endl;
}

};

int main() {
Complex c1(3.0, 4.0);
Complex c2(3.0, 4.0);
Complex c3(1.0, 2.0);

// 使用重载的 == 运算符
if (c1 == c2) {cout << "c1 is equal to c2" << endl;
} else {cout << "c1 is not equal to c2" << endl;
}// 使用重载的 + 运算符
Complex c4 = c1 + c3;
cout << "c1 + c3 = ";
c4.print();return 0;

}

解释

  1. 复数类定义:

    • Complex类有两个私有成员变量:real和imag,分别表示复数的实部和虚部。

    • 构造函数允许使用给定的实部和虚部初始化复数对象。

  2. 关系运算符重载:

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

• 这个重载的==运算符比较两个复数对象的实部和虚部是否相等。

• const关键字表示该函数不会修改调用它的对象。

  1. 算术运算符重载:

【cpp】
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}

• 这个重载的+运算符返回一个新的Complex对象,其实部和虚部分别是两个操作数对应部分的和。

• 同样,const关键字表示该函数不会修改调用它的对象。

  1. 打印函数:

    • print方法用于格式化输出复数,根据虚部的正负决定输出形式。

  2. main函数:

    • 创建了几个Complex对象,并使用重载的==和+运算符进行比较和加法运算。

    • 结果通过cout输出。

这个例子展示了如何在C++中为用户定义的类型重载关系运算符和算术运算符,使这些类型的对象能够像内置类型一样使用这些运算符。


http://www.ppmy.cn/news/1582645.html

相关文章

(每日一道算法题)翻转对

493. 翻转对 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 示例 1: 输入: [1,3,2,3,1] 输出: 2示例 2: 输入: [2,4,…

高效事件驱动设计模式——Reactor 模式

Reactor 模式 1. 概述 Reactor 模式是一种用于处理并发事件的高效事件驱动设计模式。它广泛应用于高性能服务器、网络编程和异步 I/O 处理场景&#xff0c;例如 Nginx、Netty、libevent 等。Reactor 允许一个或多个I/O 线程&#xff08;Event Loop&#xff09;高效管理多个 I…

JavaScript性能优化实战:深入探讨性能瓶颈与优化技巧

JavaScript作为现代Web开发的核心语言&#xff0c;其性能直接影响用户体验。本文将深入探讨JavaScript的性能瓶颈&#xff0c;结合实际案例分享优化技巧与最佳实践&#xff0c;帮助开发者提升代码效率。 一、JavaScript性能瓶颈分析 1. DOM操作 DOM操作是JavaScript中最耗性能…

【Docker系列五】Docker Compose 简介

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

决策树基础

决策树 定义 从根节点开始&#xff0c;也就是拥有全部的数据&#xff0c;找一个维度对根节点开始划分&#xff0c; 划分后希望数据整体的信息熵是最小的&#xff0c; 针对划分出来的两个节点&#xff0c;我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。 递归这个…

Python深浅拷贝

文章目录 1 概述2 数据类型2.1 可变类型2.2 不可变类型 3 深浅拷贝3.1 浅拷贝3.2 深拷贝 4 深浅拷贝对数据类型的影响4.1 对于不可变类型的影响4.2 对于可变类型的影响4.3 总结 5 实现机制5.1 copy5.2 id 6 示例6.1 普通赋值6.2 浅拷贝可变类型6.3 浅拷贝不可变类型6.4 深拷贝可…

2020年蓝桥杯第十一届CC++大学B组(第二次)真题及代码

目录 1A&#xff1a;门牌制作&#xff08;填空5分_拆分数字&#xff09; 2B&#xff1a;既约分数&#xff08;填空5分_gcd&#xff09; 3C&#xff1a;蛇形填数&#xff08;填空10分_找规律&#xff09; 4D&#xff1a;跑步锻炼&#xff08;填空10分_模拟&#xff09; 5E&…

大数据中的数据预处理:脏数据不清,算法徒劳!

大数据中的数据预处理&#xff1a;脏数据不清&#xff0c;算法徒劳&#xff01; 在大数据世界里&#xff0c;数据预处理是个让人又爱又恨的环节。爱它&#xff0c;是因为数据预处理做好了&#xff0c;后续的模型跑起来又快又准&#xff0c;仿佛给AI装上了火箭助推器&#xff1…