目录
? 示例:二维向量类的运算符重载
✅ 使用示例
? 关键点说明
⚠️ 注意事项
首页 后端开发 C++ C操作员超载示例

C操作员超载示例

Aug 15, 2025 am 10:18 AM
c++ 运算符重载

C 中的运算符重载允许为自定义类型赋予标准运算符新行为,1. 通过成员函数重载 返回新对象;2. 重载 =修改当前对象并返回引用;3. 友元函数重载必须为成员函数,对称操作可定义非成员函数支持类型转换,使自定义类型使用更自然,完整结束。

C   operator overloading example

C 中的运算符重载允许我们为自定义类型(如类或结构体)赋予标准运算符新的行为。下面是一个实用且清晰的示例:通过重载 运算符来操作一个表示二维向量的 <code>Vector2D 类。

C   operator overloading example

? 示例:二维向量类的运算符重载

#include <iostream>
using namespace std;

class Vector2D {
public:
    double x, y;

    // 构造函数
    Vector2D(double x = 0, double y = 0) : x(x), y(y) {}

    // 1. 重载加法运算符(成员函数方式)
    Vector2D operator (const Vector2D& other) const {
        return Vector2D(x   other.x, y   other.y);
    }

    // 2. 重载赋值加法运算符( =)
    Vector2D& operator =(const Vector2D& other) {
        x  = other.x;
        y  = other.y;
        return *this;
    }

    // 3. 重载输出运算符(友元函数,因为左操作数是 ostream)
    friend ostream& operator<<(ostream& os, const Vector2D& v) {
        os << "(" << v.x << ", " << v.y << ")";
        return os;
    }

    // 4. 重载相等比较运算符
    bool operator==(const Vector2D& other) const {
        return (x == other.x) && (y == other.y);
    }
};

✅ 使用示例

int main() {
    Vector2D a(3.0, 4.0);
    Vector2D b(1.5, 2.5);
    Vector2D c = a   b;

    cout << "a = " << a << endl;        // 输出: (3, 4)
    cout << "b = " << b << endl;        // 输出: (1.5, 2.5)
    cout << "c = a   b = " << c << endl; // 输出: (4.5, 6.5)

    if (a == Vector2D(3.0, 4.0)) {
        cout << "向量 a 等于 (3, 4)" << endl;
    }

    a  = b;
    cout << "a  = b 后,a = " << a << endl; // 输出: (4.5, 6.5)

    return 0;
}

? 关键点说明

  • operator :返回一个新的对象,不修改原对象。
  • operator =:修改当前对象并返回引用,提高效率。
  • operator<<:必须定义为友元函数,因为左操作数是 std::ostream
  • operator==:用于判断两个向量是否相等,常用于测试或查找。

⚠️ 注意事项

  • 不要重载 &&|| 运算符,因为会失去短路求值特性。
  • 通常 =[]()-> 必须作为成员函数重载。
  • 对于对称操作(如 ),如果需要类型转换(比如支持 1 v),可以将 operator 定义为非成员函数。

例如,支持 Vector2D v = 2.0 Vector2D(1,1); 可以这样写:

friend Vector2D operator (const Vector2D& v, double scalar) {
    return Vector2D(v.x   scalar, v.y   scalar);
}

friend Vector2D operator (double scalar, const Vector2D& v) {
    return v   scalar;  // 利用上面的函数
}

基本上就这些。运算符重载让自定义类型用起来像内置类型一样自然,是 C 面向对象编程的重要特性之一。

C   operator overloading example

以上是C操作员超载示例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

c弦向量示例 c弦向量示例 Aug 21, 2025 am 04:02 AM

std::vector的基本用法包括:1.声明vector;2.使用push_back()添加元素;3.用初始化列表初始化;4.用范围for循环遍历;5.通过索引或back()访问元素;6.直接赋值修改元素;7.用pop_back()删除末尾元素;8.调用size()获取元素数量;操作时推荐使用constauto&避免拷贝,预分配reserve()提升性能,并注意访问前检查非空,该数据结构是处理字符串列表的高效首选方式。

如何链接C中的库 如何链接C中的库 Aug 21, 2025 am 08:33 AM

要链接C 中的库,需在编译时使用-L指定库路径,-l指定库名,同时用-I包含头文件路径,确保静态或动态库文件存在且命名正确,必要时通过-Wl,-rpath嵌入运行时库路径,最终使编译器能找到声明、链接器能找到实现,程序即可成功构建并运行。

如何在C中使用lambdas 如何在C中使用lambdas Aug 18, 2025 am 06:16 AM

Lambda表达式是C 中定义匿名函数的便捷方式,尤其适用于STL算法。1.基本语法为[捕获列表](参数)->返回类型{函数体},返回类型通常可省略;2.可通过[变量]值捕获、[&变量]引用捕获或[=]、[&]默认捕获外部变量;3.使用mutable关键字可修改值捕获的变量;4.常用于std::sort、std::transform、std::find_if等算法中定义内联逻辑;5.可用auto或std::function存储lambda,不同lambda类型不同,不可直

如何通过参考与c中的值通过参数 如何通过参考与c中的值通过参数 Aug 22, 2025 am 08:14 AM

在C 中,传递参数的方式影响性能、安全性和原始数据的修改:传递基本类型或无需修改时用传值,大型对象且需修改时用传引用,仅读取大型对象时用const引用,避免返回局部变量的引用,以确保效率与安全。

c调用c函数来自c示例 c调用c函数来自c示例 Aug 25, 2025 am 10:01 AM

在C 中调用C函数需使用extern"C"防止名称修饰,具体步骤为:1.编写C函数头文件hello.h并用#ifdef__cplusplus包裹extern"C"以确保兼容性;2.实现C函数say_hello()并在C 主程序main.cpp中包含该头文件;3.使用g 编译C 文件并链接C目标文件或直接一步编译链接;4.运行程序可正确输出结果,表明C函数被成功调用,整个过程需确保声明和编译方式正确,最终程序能正常运行并输出“CallingCfunc

如何在C中编写异常安全代码? 如何在C中编写异常安全代码? Aug 29, 2025 am 08:17 AM

UseRAIItotieresourcemanagementtoobjectlifetimes,ensuringcleanupviadestructorsduringstackunwinding.2.Aimforstrongorno-throwexceptionsafetyguarantees,avoidingthebasicornoguaranteewhenpossible.3.Applythecopy-and-swapidiomtoachievethestrongguaranteebyper

Cronos(CRO币)是什么?是一个好投资吗?CRO币未来价格预测 Cronos(CRO币)是什么?是一个好投资吗?CRO币未来价格预测 Sep 02, 2025 pm 08:51 PM

目录什么是Cronos(CRO)有多少个CROCRO币主要功能CRO与Solana对比CRO背后的技术团队与起源重要新闻与事件CRO是一项好的投资吗CRO币长期价格预测CRO2025年价格预测CRO2026-2031年价格预测CRO2031-2036年价格预测常见问题解答Cronos (CRO)是Cronos生态系统的原生代币,该项目以其在以太坊和Cosmos区块链交汇处的地位而著称。作为一条基于

如何在Linux上的C中创建守护程序 如何在Linux上的C中创建守护程序 Aug 21, 2025 am 12:51 AM

要创建一个C 守护进程,必须先完成六步标准操作:1)调用fork并让父进程退出,确保子进程非会话组长;2)调用setsid创建新会话并脱离控制终端;3)将工作目录改为根目录并设置umask为0;4)关闭标准输入、输出、错误文件描述符并重定向到/dev/null;5)可选进行第二次fork防止重新获取终端,并设置信号处理机制,如忽略SIGHUP、捕获SIGTERM以实现优雅退出;6)进入主循环执行核心逻辑,使用syslog记录日志而非标准输出;整个过程确保进程在后台独立运行且不依赖用户会话,最终

See all articles