首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】运算符重载 ① ( 运算符重载简介 | 运算符重载推衍 | 普通类型数据相加 | 对象类型数据相加 - 普通函数实现 运算符重载实现 | 运算符重载调用 - 函数名调用 运算符调 )

这是因为没有对 自定义类 的 " + " 运算符 , 进行 " 运算符重载 " , 直接使用加法操作 , 会报错 ; 这里就需要为 类 设置 " 运算符重载 " , 才能进行类的相加操作 , 具体相加的结果..., 需要通过 重载的运算符函数的操作决定 ; 2、运算符重载简介 运算符重载 , 可以使 用户自定义数据 , 以 更简洁的方式 运作 ; 运算符重载 是 C++ 语言中的 一种特殊的语言特性 , 运算符重载...机制允许 开发者 为自定义类型 重新定义 运算符 的行为 ; 通过运算符重载 , 可以使 自定义类型 以 更自然 和 直观 的方式与 内置类型 进行交互 ; 要重载一个 运算符 , 需要在 类中 声明一个...成员函数 或 非成员函数 , 并使用 operator 关键字 修饰 要重载的 运算符函数 , 这个函数的 参数 和 返回类型 决定了运算符的行为 ; 二、运算符重载推衍 1、普通类型数据相加 基础数据类型相加...s3 = addStudent(s1, s2); // 运算符重载实现对象相加 s4 = operator+(s1, s2); 使用 + 运算符 调用运算符重载函数 直接使用 + 运算符调用

20920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++中运算符的重载

    我们之前提到过C++中的函数重载,可以根据形参的不同调用不同的函数,那么运算符重载跟函数重载的实现形式差不多,运算符重载的一般写法为返回值 operator运算符(参数列表)。...person p3 = p1+p2; // 加法运算符重载,实现两个类中的 age 成员相加 p3.show(); 上述重载的过程其实就是 p1调用 operator+ 函数,相当于 p1.operator...输出结果如下: name: 张三 age: 52 1.2 全局函数写法 在成员函数的写法中,由于在调用加法重载时已经指定了一个对象 ( this 指针指向的对象 ),所以重载函数内只需要再传递一个参数即可...25); // 调用值传递拷贝函数给对象赋值 person p2("李四", 27); // 调用值传递靠别函数给对象赋值 person p3 = p1+p2; // 加法运算符重载,实现两个类中的...在这里如果对引用不是很清楚的可以移步另一篇文章:C++中指针与引用详解 - ZhiboZhao - 博客园 (cnblogs.com)。

    88800

    C++运算符重载的形式

    一、重载为类的成员函数 重载单目运算符“++”,如果重载的是前置运算符“++”,则++a1的调用相当于调用函数a1.operator++()。...如果重载的是后置运算符“++”,则运算符重载函数需要带一个整型参数,即“operator++(int)”,参数int仅仅表示后置运算,用于和前置运算区分,并无其他意义。...为了加深读者的理解,下面通过案例演示前置运算符“++”与后置运算符“++”的重载,如例所示。...二、重载为类的友元函数 重载为类的友元函数时,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的参数进行传递,函数的参数与操作数自左至右保持一致。...下面通过案例演示将运算符“+”和“?”重载为类的友元函数,如例所示。

    80050

    【C++】C++运算符重载的规则

    本篇博客讲解: 运算符重载的规则,以及实例 运算符重载的规则 被重载的运算符必须是已经存在的C++运算符,不能重载自己创建的运算符。 运算符被重载之后,原有功能仍然保留。...重载不能改变运算符运算对象的个数。 +运算符具有两个操作数,在+运算符函数作为类(例如上个例子中的CTime)的成员函数的时候,有一个参数是隐含的,也就是当前的对象,使用this指针来引用。...(成员访问运算符) *(成员指针访问运算符) ::(域运算符) sizeof(sizeof 是运算符,而不是函数) 不需要重载的运算符 =(赋值)和&(取地址符) 因为编译器会为每个类自动实现一个默认的赋值运算符...一般将单目运算符重载为成员函数,将双目运算符重载为友元函数 成员函数方式要求左侧的参数要与类的类型相同。而普通函数则要求实参顺序与形参类型顺序一致。...如 有的运算符必须定义为类的成员函数 =、赋值运算符 []、下标运算符 () 函数调用运算符 有的运算符不能定义为类的成员函数,只能定义为类的友元 > 运算符重载可以在函数内执行任意的操作

    58830

    【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )

    上 篇博客 【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 ) 【C++】运算符重载 ⑤ (...一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 ) 讲解了 前置运算符 的 重载 , 前置运算符就是 ++Object 或...--Object , 一元运算符 在 对象的 前面 ; 本篇博客开始讲解 后置运算符 的重载 ; 一、后置运算符重载 1、前置运算符重载 与 后置运算符重载 的区别 后置运算符 是 Object++ 或...Object-- , 一元运算符在对象的后面 ; 前置运算符重载 与 后置运算符重载 的区别是 返回值类型 不同 , 前置运算符重载 , 返回值是 对象引用 ; // 使用 全局函数 实现 前置 ++...自增运算符重载 // 重载 前置 ++ 运算符 // 实现 1 个 Student 对象 自增运算 // 由于 参数中的 Student& s 中的属性发生了变化 // 返回时仍需要返回 Student

    13910

    【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )

    上 篇博客 【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 ) 【C++】运算符重载 ⑤ (...一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 ) 讲解了 前置运算符 的 重载 , 前置运算符就是 ++Object 或...--Object , 一元运算符 在 对象的 前面 ; 本篇博客开始讲解 后置运算符 的重载 ; 一、后置运算符重载 1、前置运算符重载 与 后置运算符重载 的区别 后置运算符 是 Object++ 或...Object-- , 一元运算符在对象的后面 ; 前置运算符重载 与 后置运算符重载 的区别是 返回值类型 不同 , 前置运算符重载 , 返回值是 对象引用 ; // 使用 全局函数 实现 前置 ++...自增运算符重载 // 重载 前置 ++ 运算符 // 实现 1 个 Student 对象 自增运算 // 由于 参数中的 Student& s 中的属性发生了变化 // 返回时仍需要返回 Student

    14830

    【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )

    , 编写具体的运算符操作业务逻辑 ; 先把本对象已分配的内存释放掉 ; 再进行赋值操作 ; 3、不同的右操作数对应的 重载运算符函数 不同的右操作数对应的 重载运算符函数 : 右操作数是 String...; char 字符是内存中的一个地址中的值 , 这里返回引用类型 ; char& operator[](int i) 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ; // 重载 数组下标...; } // 重载 数组下标 [] 操作符 char& String::operator[](int i) { cout 调用重载 下标 [] 操作符函数 char& String::operator...// 调用拷贝构造函数 String s3 = s2; // 调用重载的等号运算符函数, 右操作数是 String 对象 s1 = s2; // 调用重载的等号运算符函数, 右操作数是...字符串常量值 , char* 指针类型 s3 = "Jerry"; // 调用重载的下标运算符函数 char c = s3[3]; // 控制台暂停 , 按任意键继续向后执行 system

    40130

    【C++】运算符重载 ⑪ ( 数组类 中 等号 = 运算符重载 | 函数原型 Array& operator=(Array& a) | 完整代码示例 )

    一、数组类 等号 = 运算符重载 1、数组类回顾 数组类 定义后 , 如果 想要 使用 一个已存在的数组类对象 为 另外一个已存在的数组类对象 赋值 , 就需要 重载 等号 = 运算符 ; 重载 等号...= c , 然后再执行 a = (b = c) , 可见 等号运算符 的返回值 也要是一个相同类型的对象 , 该对象必须是引用类型 , 否则返回的是一个匿名对象 ; 2、等号 = 运算符重载 使用 成员函数...实现 等号 = 运算符重载 : 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 , 要对 Array a 对象 , 使用 = 运算符 , 使用时用法为...引用 / 指针 / 元素 ; 等号运算 是 右结合 的 , a = b = c 代码 , 先执行 b = c , 然后再执行 a = (b = c) , 可见 等号运算符 的返回值 也要是一个相同类型的对象...) << endl; cout << array[i] << endl; } // 使用拷贝构造函数 赋值 Array array2(3); Array array3(3); // 调用重载的等号运算符

    16610

    【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )

    , 并支持链式操作 ; 一、等号 = 运算符重载 ---- 1、调用默认浅拷贝构造函数的情况分析 C++ 编译器 为 类 提供的 默认的 拷贝操作 , 是对 成员变量 的简单拷贝 , 是 浅拷贝 ;...拷贝构造函数 各自使用场景 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 : 拷贝构造函数 : 如果 使用对象 为一个 新对象 进行初始化 , 调用的是拷贝构造函数 ; 等号 = 运算符重载 :...如果 使用对象 为一个已存在的对象 重新进行赋值 , 调用的是 等号运算符 的 重载运算符方法 ; 3、= 操作符重载步骤 使用 成员函数 实现 等号 = 运算符重载 : 首先 , 写出函数名 , Student...s2 = s; 等号 = 运算符重载 , 函数名规则为 " operate " 后面跟上要重载的运算符 , 函数名是 operate= ; operate= 然后 , 根据操作数 写出函数参数 , 参数一般都是...; 如果是成员函数 , 则将重载函数写在 左操作数 中 , 在 重载操作数的 成员函数中 this 指针就是 左操作数 ; operator=(Student& s) 再后 , 根据业务完善返回值 ,

    27820

    C++ 运算符重载的基本概念

    — 1 — 运算符重载的需求 C++ 预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型等等,且不能用于对象的运算。...但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符,使得运算符能用于对象之间的运算。...比如,在数学上,两个复数可以直接进行+、-等运算,但在C++中,直接将+或-用于复数对象是不允许的。有时会希望,让对象也能通过运算符进行运算。这样代码就更简洁,也容易理解。...— 2 — 运算符重载的形式 运算符重载的实质就是函数重载,可以重载为普通函数,也可以重载为成员函数。...,就会调用默认的赋值(拷贝)构造函数,产生了一个临时对象,这会增大开销,所以就采用引用的方式,同时又为了防止引用的对象被修改,所以就定义成了const Complex & c常引用类型。

    1K40

    《C++魔法:运算符重载的奇妙之旅》

    在 C++的广阔编程世界里,运算符重载就像是一把神奇的钥匙,为程序员打开了更多可能性的大门。它赋予了我们自定义数据类型以更自然、更直观的操作方式,让代码更加简洁高效。...比如,对于一个表示复数的类,如果我们重载了“+”运算符,就可以像操作普通数字一样进行复数的加法运算,如 c1 + c2 ,而不是使用晦涩难懂的函数调用。...提高代码效率 通过运算符重载,我们可以避免频繁地调用函数,从而提高代码的执行效率。特别是在一些频繁进行特定操作的场景下,运算符重载可以大大减少代码的冗余。...考虑运算符的优先级和结合性 运算符的优先级和结合性是固定的,在重载运算符时,应考虑这些特性,以确保代码的正确性。 总之,运算符重载是 C++中一个强大而有趣的特性。...让我们一起在 C++的世界里,用运算符重载创造出更加精彩的代码吧!

    8310

    【C++】运算符重载 ② ( 类内部定义云算符重载 - 成员函数 | 类外部定义运算符重载 - 全局函数 | 可重载的运算符 )

    一、运算符重载本质 运算符重载的本质是 " 函数调用 " ; 当使用 + 将 个对象相加时 , C++ 编译器会查找是否有定义运算符重载函数 ; // 自定义类型相加 Student s1(10,...二、运算符重载语法 - 类内部定义云算符重载 ( 成员函数 ) 1、运算符重载函数语法说明 C++ 中允许重新定义运算符的行为 , 如常用的加减成熟运算符 , 都可以进行重载操作 ; 可以自定义运算符的操作..., 可以使用函数形式调用 , 也可以使用运算符进行运算 , 其 本质还是类的函数调用 ; 2、运算符重载函数调用 重载运算符完整调用 , 即调用上面定义的整个 operator+ 方法 , 这是采用正式的的函数调用方式...o3; } 2、运算符重载函数调用 已重载的运算符调用 , 可以直接调用运算符重载的 operator*() 方法 , 也可以直接使用运算符 , o1 * o2 ; //运算符重载 //注意这里的...) , new[] ( 新建数组对象 ) , delete ( 释放对象 ) , delete[] ( 释放数组对象 ) 函数调用运算符 () 成员访问运算符 -> 下标运算符 [] 逗号运算符 ,

    26010

    C++指向数组元素的指针

    C++指向数组元素的指针 在C++中,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址;指针变量既然可以指向变量,也可以指向数组元素,所谓数组元素的指针就是数组元素的地址...p=&array[0]; 和C语言一样,在C++中,数组名代表数组中第一个元素的地址,因此也可以这样写: p=&array[0]; p=array; 在定义指针变量时可以直接赋初值,p的初值为array...*(p+i)或*(array+i)是p+i或array+i所指向的数组元素,即array[i],可以看出,[]实际上是变址运算符。...其中array是数组名,p是指向数组元素的指针变量。 经典案例:C++输出数组中的10个元素。...C++指向数组元素的指针 用指针输出数组中的10个数 更多案例可以go公众号:C语言入门到精通

    2.1K2319

    《C++运算符重载:谨慎开启的强大魔法》

    在 C++的编程世界中,运算符重载是一项强大而又充满魅力的技术。它允许程序员重新定义已有运算符对于特定类型的操作,为代码带来更高的灵活性和可读性。...然而,就像一把双刃剑,运算符重载如果使用不当,也可能会引发一系列问题。那么,C++中的运算符重载有哪些注意事项呢?让我们一同深入探讨。...可以通过抛出异常或者返回一个特殊的值来表示错误状态。 2. 处理无效操作数 对于一些无效的操作数组合,应该有合理的处理方式。...例如,如果尝试对一个未初始化的对象进行运算符操作,应该给出明确的错误提示或者采取适当的默认行为。 六、与其他语言特性的兼容性 1. ...只有在充分理解运算符重载的本质和注意事项的基础上,我们才能在 C++的编程世界中巧妙地运用这一强大的魔法,创造出更加优秀的代码。

    13810

    C++基础——C++面向对象之重载与多态基础总结(函数重载、运算符重载、多态的使用)

    1 重载         C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。...当调用一个重载函数或重载运算符时,编译器通过把所使用的参数类型与定义中的参数类型对比,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。...编译程序,运行结果: 2 多态         C++中多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数,形成多态必须具备三个条件: 1)必须存在继承关系; 2)继承关系必须有同名虚函数...; 3)存在基类类型的指针或者引用,通过该指针或引用调用虚函数。...;虚函数是C++中实现多态的机制,核心就是通过基类访问派生类定义的函数;         上面的实例是基类 Animal 声明了一个指针 animal。

    88310

    (转载非原创)C++中运算符的重载

    我们之前提到过C++中的函数重载,可以根据形参的不同调用不同的函数,那么运算符重载跟函数重载的实现形式差不多,运算符重载的一般写法为返回值 operator运算符(参数列表)。...person p3 = p1+p2; // 加法运算符重载,实现两个类中的 age 成员相加 p3.show(); 上述重载的过程其实就是 p1调用 operator+ 函数,相当于 p1.operator...输出结果如下: name: 张三 age: 52 1.2 全局函数写法 在成员函数的写法中,由于在调用加法重载时已经指定了一个对象 ( this 指针指向的对象 ),所以重载函数内只需要再传递一个参数即可...25); // 调用值传递拷贝函数给对象赋值 person p2("李四", 27); // 调用值传递靠别函数给对象赋值 person p3 = p1+p2; // 加法运算符重载,实现两个类中的...在这里如果对引用不是很清楚的可以移步另一篇文章:C++中指针与引用详解 - ZhiboZhao - 博客园 (cnblogs.com)。

    75820

    C++运算符重载的一些规则

    重载运算符并不能改变他们的优先级。但是我们可以通过使用括号来强制运算按照我们希望的优先级进行。...重载运算符并不能改变运算符的关联性(左关联或者右关联) 重载运算符并不能改变运算符的操作数,也就是说,二元运算符与一元运算符不能相互转化 我们无法创建新的运算符 内置基本类型的操作符无法被重载。...(比如说,你不能通过重载int的运算符,把+变成-的功能) 相关运算符,比如+和+=,需要分别重载 当重载(), [], ->等分配运算符时,重载函数必须是类的成员函数。...对于其他可以重载的运算符,重载函数可以是类的成员函数,也可以不是类的成员函数。

    34320
    领券