当前位置: 首页 > news >正文

C++基础面试题 | 什么是C++中的运算符重载?

在这里插入图片描述

文章目录

    • 回答重点:
      • 示例:
    • 运算符重载的基本规则和注意事项:

回答重点:

C++的运算符重载是指可以为自定义类型(如类或结构体)定义运算符的行为,使其像内置类型一样使用运算符。通过重载运算符,开发者可以对类对象使用常见的运算符(如+, -, *, ==, []等),并为它们赋予特定的操作逻辑。

  1. 重载的运算符仍然遵守其原有的优先级和结合性。
  2. 重载必须是通过类成员函数或友元函数实现。
  3. 不能重载的运算符::.*.:sizeoftypeidconst_cast等。

示例:

class Complex {
public:int real, imag;Complex(int r = 0, int i = 0) : real(r), imag(i) {}// 重载 + 运算符Complex operator + (const Complex &obj) {return Complex(real + obj.real, imag + obj.imag);}
};

重载+后,以下代码就可以正常工作:

Complex a(1.0, 2.0);
Complex b(3.0, 4.0);
Complex c = a + b; // 使用重载的+运算符

运算符重载的基本规则和注意事项:

  1. 只能重载已有的运算符,不能创建新的运算符。
    比如 + 运算符可以重载,但不能创建一个新的运算符。

  2. 不能改变运算符的优先级、结合性和内在语义。
    重载只改变运算符的操作对象和行为,但在表达式中的优先级和结合性是固定的,也不能改变其在基本类型上的预期行为。例如,不能让 + 运算符变成减法。

  3. 有些运算符不能被重载。
    比如 .(成员访问运算符)、?:(三元条件运算符)等不能被重载。但是大多数运算符符合相应的规定都可以重载。

  4. 运算符重载可以作为成员函数或全局函数。
    作为成员函数时,第一个参数隐含为 this 指针。如果需要对两个不同类型的对象进行操作,通常会使用全局函数形式重载,同时全局函数形式需要使用友元声明访问类的私有成员。

class Complex {
public:Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}// 声明为友元函数,使其访问私有成员friend Complex operator+ (const Complex& lhs, const Complex& rhs);private:double real;double imag;
};// 作为全局函数重载 + 运算符
Complex operator+ (const Complex& lhs, const Complex& rhs) {return Complex(lhs.real + rhs.real, lhs.imag + rhs.imag);
}
  1. 运算符重载要确保符合逻辑和直观,以免造成困惑。例如,== 运算符通常用于比较对象是否相等,那么它的返回值应该是一个布尔值。
http://www.lryc.cn/news/460569.html

相关文章:

  • 深入 IDEA 字节码世界:如何轻松查看 .class 文件?
  • NodeJS 利用代码生成工具编写GRPC
  • uni-app基础语法(一)
  • Linux:进程控制(三)——进程程序替换
  • LeetCode279:完全平方数
  • python爬虫--某动漫信息采集
  • 使用Rollup.js快速开始构建一个前端项目
  • 10.15学习
  • mongodb-7.0.14分片副本集超详细部署
  • C++运算出现整型溢出
  • LeetCode岛屿数量
  • Karmada核心概念
  • Rust 与生成式 AI:从语言选择到开发工具的演进
  • Python爬虫高效数据爬取方法
  • C语言之扫雷小游戏(完整代码版)
  • Spring WebFlux 响应式概述(1)
  • Unity游戏通用框架——事件的订阅和发布(观察者模式)
  • 将 Ubuntu 系统中的 **swap** 空间从 2GB 扩展到 16GB
  • 流程图 LogicFlow
  • Mac通过键盘选取内容
  • 如何通过OpenCV实现图像融合拼接?
  • Qt5.14.2 安装详细教程(图文版)
  • 深圳市步步精科技有限公司荣获发明专利,彰显技术研发实力
  • std::function的概念和使用方法
  • OpenAI的Swarm是一个实验性质的多智能体编排框架
  • 简易STL实现 | Map 的实现
  • `concurrent.futures` 是 Python 标准库中的一个模块
  • PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技
  • leetcode128最长连续序列 golang版
  • 【OpenCV】(六)—— 阈值处理