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

如何将+和+=操作符作为非成员函数重载?

在C++中,可以通过重载非成员函数的方式来实现对+和+=操作符的重载。重载+操作符时,需要定义一个函数,其参数为两个操作数,返回值为操作结果。重载+=操作符时,需要定义一个函数,其参数为一个操作数和一个常量引用,返回值为操作结果。

下面是一个示例代码:

代码语言:txt
复制
#include <iostream>

class MyClass {
private:
    int value;
public:
    MyClass(int val) : value(val) {}

    int getValue() const {
        return value;
    }
};

// 重载+操作符
MyClass operator+(const MyClass& obj1, const MyClass& obj2) {
    int sum = obj1.getValue() + obj2.getValue();
    return MyClass(sum);
}

// 重载+=操作符
MyClass& operator+=(MyClass& obj1, const MyClass& obj2) {
    obj1 = obj1 + obj2;
    return obj1;
}

int main() {
    MyClass obj1(5);
    MyClass obj2(10);

    MyClass obj3 = obj1 + obj2;
    std::cout << "obj3 value: " << obj3.getValue() << std::endl;

    obj1 += obj2;
    std::cout << "obj1 value after += operation: " << obj1.getValue() << std::endl;

    return 0;
}

在上述代码中,我们定义了一个名为MyClass的类,其中包含一个私有成员变量value和一个公有成员函数getValue()。然后,我们通过重载非成员函数的方式实现了对+和+=操作符的重载。在main()函数中,我们创建了两个MyClass对象obj1obj2,并演示了对+和+=操作符的使用。

请注意,以上示例代码仅为演示如何重载+和+=操作符,并不涉及云计算或其他相关领域的知识。

相关搜索:非静态成员函数的无效使用-如何将成员函数的函数指针传递给非成员函数?C++成员函数虚拟覆盖和重载同时进行如何将类成员函数作为回调传递?无需使用成员函数和友元函数即可实现运算符重载消除指向重载常量成员函数和成员运算符的指针的歧义为什么我需要让这个非友元==操作符重载一个成员函数,以避免“未定义的引用”错误?未捕获lambda和函数指针作为重载函数歧义中的参数如何接受ref和非ref值作为函数参数那么,如何将函数表达式转换为操作符重载表达式呢?如何将链表和函数指针作为输入成员函数指针作为模板论证在继承的成员函数上失败,原因和原因是什么?如何删除类似const和非const成员函数之间的代码重复?如何将对象的成员函数作为std算法的unary_function调用?如何将特定类中的非静态方法作为参数传递给函数如何将一个类的std::bind成员函数作为线程门户函数转换为"C“格式?如何将此函数参数化以接受函数和TextIO.closeOut作为输入?如何将struct作为类中的私有成员,并为其创建参数化的构造函数/setter函数?当使用互斥锁和条件变量作为成员时,如何修复“删除函数的使用”?如何在Swift 5.1 (Xcode 11 Playground)中实现可选函数的泛型和非泛型函数签名的重载?c++如何将min()和max()作为构造函数参数传递?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ 操作符重载形式——成员函数 or 友元函数

操作符重载,又名运算符重载,是 C++ 多态的重要实现手段之一。通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强 C++ 的扩展功能。...一般来说,C++ 运算符重载可采用成员函数友元函数,二者都可以访问类的私有成员,那么该采用哪一种呢?首先看一下二者的区别。...当重载成员函数时,会隐含一个 this 指针;当重载为友元函数时,不存在隐含的 this 指针,需要在参数列表中显示添加操作数。...当重载成员函数时,只允许右参数的隐式转换;当重载为友元函数时,能够接受左参数右参数的隐式转换。...;而对于单目运算符,则最好重载成员函数

1K30

原创】C++类成员函数重载、覆盖隐藏

题目: 类成员函数重载、覆盖隐藏区别描述正确的有?...A、覆盖是指在同一个类中名字相同,参数不同 B、重载是指派生类函数覆盖基类函数函数相同,参数相同,基类函数必须有virtual关键字 C、派生类函数与基类函数相同,但是参数不同,会"隐藏"父类函数 D...、函数名字相同,参数相同,基类无virtual关键字的派生类的函数会"隐藏"父类函数 答案: CD 解析: a.成员函数重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同;...“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。...(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

68620
  • 静态成员函数静态成员函数的区别?

    一个静态成员函数不与任何对象相联系,故不能对静态成员进行默认访问。 它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()的调用,编译像注解的那样进行转换,s的地址作为第一个传递的参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对静态成员的访问将自动把this参数作为指向当前对象的指针。而当Sc::sfn()被调用时,没有任何对象的地址被传递。因此,当访问静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系的原因。

    1.8K90

    【C++】 类与对象——流操作符重载,const成员函数

    类与对象 流操作符重载 1 << 重载 2 >> 重载 const 修饰 Thanks♪(・ω・)ノ谢谢阅读!!! 下一篇文章见!!!...流操作符重载操作符 功能 << 输出操作符 >> 输入操作符 对于这两个操作符,我们如何做到重载呢???...(Date* this, ostream& out) 作为成员函数重载,this指针占据第一个参数,Date必须是左操作数!...那为了规避这个问题,我们就要把函数中参数的顺序改变,所以我们的重载就不能是成员函数。...我们把重载<<作为全局函数来看呢 这时我们可以正确的输出了,但是代价是我们成员变量改为公有了,不然我们在重载<<函数无法访问成员变量,这就让我们这个类变得不够安全,所以这里使用友元来解决。

    12010

    C++第五弹 -- 类与对象中篇下(赋值运算符重载函数 const成员函数 取地址操作符重载函数)

    前言 本文将深入探讨C++中的运算符重载,重点讲解赋值运算符、前置/后置++运算符、取地址运算符的重载方法,以及const成员函数的定义使用方法。...通过日期类的实现示例,展示运算符重载const成员函数在实际应用中的具体代码实现,帮助读者更好地理解运用这些C++特性。 博客主页: 酷酷学!!! 感谢关注~ 正文开始 一....:内置的整型+,不能改变其含义(这样只是更加规范) 作为成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this .* :: sizeof ?...*fp)(); // // // return 0; //} 全局的运算符重载operator== 重载成全局,无法访问私有成员 1、提供这些成员getset 2、友元 后面会讲 3、重载成员函数...取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

    5710

    【C++】类对象---const成员,取地址及const取地址操作符重载,static成员

    const成员函数,也可以调用const成员函数 请思考下面的几个问题: 1. const对象可以调用const成员函数吗?...const成员函数内可以调用其它的const成员函数吗?...可以,是权限的缩小 ⭐取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。...this指针,不能访问任何静态成员 静态成员也是类的成员,受public、protected、private 访问限定符的限制 【问题】 静态成员函数可以调用静态成员函数吗?...不可以,静态成员函数没有this指针,不能访问静态的成员变量 静态成员函数可以调用类的静态成员函数吗? 可以的,它们都在同一个类里面

    12810

    C++中constconst对象分别调用constconst成员函数

    一、先来提出问题 const对象可以调用const成员函数吗? const对象可以调用const成员函数吗? const成员函数内可以调用其它的const成员函数吗?...const成员函数内可以调用其他的const成员函数吗?...二、实践出真知 1、const对象可以调用const成员函数 2、const对象不能调用const成员函数 3、const对象可以调用const成员函数 4、const对象可以调用const成员函数...5、const成员函数不能调用const成员函数 6、const成员函数可以调用const成员函数 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,...* this; 是void print() const;中this指针的类型是一样的,所以常量对象可以调用const成员函数

    1.3K20

    【细品C++】深入了解类对象(六大默认成员函数以及操作符重载

    赋值运算符重载 操作符重载 在讲重载赋值操作符前先简单了解一下重载操作符。...:比如operator@ 重载操作符必须有一个类类型(内置类型)参数 不能重新定义用于内置类型对象的操作符的含义,如内置的整型+,不能改变其含义,也不能使内置的整型数组增加+的操作符功能。...形参表必须具有与该操作符数目相同的形参(如果操作符重载为一个类成员函数,则包括隐式 this 形参)。从左至右的形参位置对应着从左至右操作位。 .* :: sizeof ?...这样的特殊(有前置后置)的单目操作符又有点特别的处理。...取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义,编译器默认会生成。

    86920

    【C++】成员函数重载二元一元运算符

    重载双目运算符时,运算符函数中应该具有两个参数,若运算符函数作为类的成员函数(当运算符重载函数作为类的成员函数时,要求操作数左边必须是一个对象,而函数的参数可以是同类的对象也可以是普通的变量),则只需要一个参数...对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。...成员函数重载 == 、>运算符: bool operator==(CTime& time); bool operator>(CTime& time); //判断对象的每个成员变量是否相等...(m_nMinute < time.m_nMinute) { return false; } else //这是两个对象的时钟分钟相等的情况下...false; } } } return false; //最后就是两个对象相等,也不满足一个对象大于另外一个对象的情况,返回false } 成员函数重载

    52720

    【C++】类对象(中):类的默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    3.我们不写,编译器默认生成的构造,对内置类型成员变量自定义成员变量不同。...1.运算符重载其实是一个具有特殊名字的函数,它的名字由operator后面要定义的运算符共同组成。其他函数一样,它也具有返回类型参数列表以及函数体。...3.运算符重载以后,优先级结合性与对应的内置类型运算符保持一致。 4.不能用语法中没有的符号来创建新的操作符。...(比如不可以operator@) 5.有5个操作符不能重载:域作用限定符(::) , sizeof ,三目操作符(?:) , 点操作符(.)...,成员函数回调时一个操作符(.*) 6.重载操作符至少有一个类类型参数,不能通过运算符重载改变内置类型对象的含义。 7.要重载有意义的运算符。

    8910

    【C++修行之道】类对象(五)日期类的实现、const成员、取地址及const取地址操作符重载

    将 operator<< 的参数顺序反过来会导致函数不能正常作为流插入运算符使用,破坏标准库的调用方式使用习惯。...const对象可以调用const成员函数吗? const对象可以调用const成员函数。 const成员函数的主要目的是确保函数不会修改对象的状态。...3. const成员函数内可以调用其它的const成员函数吗? 不可以。在const成员函数中,不能直接调用同一个类的const成员函数。...总结来说,const成员函数内不能直接调用const成员函数,以保持const成员函数的承诺不修改对象状态。 4. const成员函数内可以调用其它的const成员函数吗?...三、取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

    9710

    【C++类对象】const成员函数及流插入提取

    前面我们学习过六大默认成员函数中的四个——构造函数与析构函数以及拷贝构造与赋值运算符重载,今天我们继续学习剩下的成员函数——取地址与const取地址操作符重载。...目录 前言 1.const成员函数 2.取地址以及const取地址操作符重载 3.流插入流提取运算符重载 4.结语 1.const成员函数 const成员函数是指在函数声明定义时使用const关键字修饰的成员函数...它的重载函数应该以ostream&类型作为返回值,并以一个 ostream&类型的参数(通常是输出流对象)要输出的数据作为参数。 流提取运算符(>>)用于从输入流中提取数据。...它的重载函数应该以 istream&类型作为返回值,并以一个 istream&类型的参数(通常是输入流对象)要提取到的数据的引用作为参数。...在C++中流插入提取操作符重载是不可以重载成员函数,因为它们参数的顺序不可以改变,例如: 这是因为流插入第一个运算符是cout,而如果将其重载成员函数第一个参数就是类对象中隐含的this指针

    12010

    C++primer学习笔记(五)

    static成员函数没有this形参,可直接访问类的static成员,不能使用static成员。 静态数据成员属于一个类,而不属于类的各个对象。静态成员函数在所有对象建立之前或删除之后仍然使用。...构造函数如果是explicit必须严格按照定义使用构造函数,否则可以存在隐式转换。 引用形参将复制实参值,引用return将复制return的东西。...重载操作符:保留字operator后面接需要定义的操作符符号,返回类型参数表其它函数一样。只能重载已有的操作符,只针对类类型,最好重载原本对类类型无意义的操作符。...使用算法sort等时会假定一些操作符(<)存在,此时要为类型定义重载操作符重载操作符如果是成员函数,左操作数必须是该类的对象【一定是this】。 用函数或类操作某个类的数据可设置其为友元。...()是调用操作符,有这个的类称为函数对象,行为类似函数函数对象作为算法实参,比函数更灵活。标准库中有几个函数对象。

    36810

    【C++初阶】类与对象:6大默认成员函数------拷贝构造赋值运算符重载

    operator操作符(参数列表); 运算符重载函数的调用一般的函数也是一样的,只不过运算符重载函数名有点特殊而已。...注意: 1.不能通过连接其他符号来创建新的操作符:比如operator@; 2.重载操作符必须有一个类类型参数; 3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义;...4.作为成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐 藏的this; 5.    .*   ::     sizeof     ?...3.返回*this :要符合连续赋值的含义; 注意: 赋值运算符只能重载成类的成员函数不能重载成全局函数,因为重载成全局的,类里面又会自动生成一个,这样编译器就无法分辨; 如果没有显示定义赋值运算符重载...,那么会自动生成的赋值运算符重载,这拷贝构造函数类似: 1.对内置类型完成浅拷贝; 2.对自定义类型会去调用它的赋值运算符重载函数 下面是日期类的赋值运算符重载: Date& operator

    14610

    对象(万字总结!深度总结了类的相关知识)(中)

    运算符重载使得自定义类可以使用与内置类型相同的运算符进行操作,提高了代码的可读性一致性。 在C++中,赋值运算符的重载允许你定义如何将一个对象的值赋给另一个对象。...然而,这个重载函数通常不能作为类的成员函数,以下是一些原因: 运算符的左操作数必须是非类类型: 流插入运算符<<的左操作数通常是标准输出流对象(如std::ostream)。...只能调用其他const成员函数: 在const成员函数中,您只能调用其他const成员函数,不能调用const成员函数,因为const函数可能修改对象的状态。.../ obj.setValue(5); // 错误:不能调用 const 成员函数 } 总结: const对象不可以调用·成员函数(权限放大不允许) const对象可以调用const成员函数(权限缩小允许...) const成员函数内不可以调用其他的const成员函数(权限放大不允许) ·成员函数内可以调用其他的const成员函数(权限缩小允许) 凡是内部不改变成员变量,也就是*this对象数据的,这些成员函数都应该加

    9410

    对象:运算符重载

    运算符重载的语法 函数原型:**返回值类型 operator操作符(参数列表)** 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型的运算符...当你尝试将赋值运算符重载为全局函数时,会出现问题,原因如下: 成员访问权限:作为全局函数,赋值运算符将无法访问类的非公共(private或protected)成员变量。...作为成员函数,它清楚地表达了这一点,因为它是在对象上直接调用的。作为全局函数,这种语义就不那么明确了。 重载规则:C++ 的运算符重载规则限制了某些运算符(包括赋值运算符)只能作为成员函数重载。...正确的做法是将其作为类的成员函数重载,以确保正确的访问权限、自赋值保护以及符合C++的语法语义要求。...这个默认的赋值运算符会进行成员成员的简单赋值,也就是逐个复制每个引用、指针成员变量的值。

    10910

    【C++】类与对象篇三

    函数原型:返回值类型 operator操作符(参数列表) 注意: 1 . 不能通过连接其他符号来创建新的操作符:比如operator@ 2 . 重载操作符必须有一个类类型参数 3 ....作为成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this 5 .*(点星号) :: (作用域限定符) sizeof(以字节计算大小) ?: (三目) ....const: 类比: 为什么不可变序,也是权限问题 const对象可以调用const成员函数吗?...答:由上图可知:不可以,权限不可放大 const对象可以调用const成员函数吗?答:由上图可知:可以,权限可以缩小 const成员函数内可以调用其它的const成员函数吗?...答:不可以,如下图 const成员函数内可以调用其它的const成员函数吗?答:可以 5 . 取地址及const取地址操作符重载 这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

    7310

    初级程序员面试不靠谱指南(二)

    C++作为一种面向对象的语言,可以定义类、成员函数等等是其区别于C语言的一个重大特点,const关键字在类中的使用也是有各种陷阱容易混淆的地方的,为了配合下面的说明,我们定义一个类Mobile。...在删去该函数之后,编译通过,也就是说,在类中,可以使用const实现对于成员函数重载,但是想要达到这一目的摆放的位置很重要。...总之,在类中,可以使用const限制成员函数成员变量的修改,并且可以实现成员函数重载。 下一个问题可能稍微有些颠覆性,怎样看待一个类的const?...如何将const的强制转换成为const,c++使const_cast(expression)可以将const的值转化成为const的值,但是这个转换指的是const指针转换成为const...下一个我曾经遇到的问题是,为什么一般要用const修饰operator*(或者在重载操作符其余的操作符定义中)?

    67970

    C++初阶-类对象中

    C++类对象渐入之章 一、前言 二、类的6个默认成员函数汇总 三、构造函数 四、析构函数 五、拷贝构造函数 六、赋值运算符重载 1、运算符重载 2、赋值运算符重载 七、日期类的实现 八、const成员...九、取地址及const取地址操作符重载 一、前言 本章是继C++类对象启点之章的后续,进一步深入学习掌握C++类对象 二、类的6个默认成员函数汇总 对于任何一个类来说,在我们不主动写默认成员函数时...对于友元的知识在类对象最终章会详细讲解,这里只做了解 注:一般来说都建议将操作符重载设定在类里面(重载成员函数) 用于内置类型的操作符,其含义不能改变,例如:内置的整型+,不能改变其含义...作为成员重载函数时,其形参看起来比操作数数目少1成员函数,但是操作符函数有一个默认的形参this,限定为第一个形参(注:对于两个操作数的操作符,第一个形参代表左操作数,第二个形参代表右操作数...能,const对象即是可读可写,调用const成员函数则只需要对象能可读就行(权限的缩小) const成员函数内可以调用其它的const成员函数吗?

    61220

    【C++】类与对象(运算符重载、const成员、取地址重载

    函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型的运算符,其含义不能改变,例如...:内置的整型+,不能改变其含义 作为成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this .* :: sizeof ?...:要复合连续赋值的含义 上方是拷贝构造赋值重载的区别。...总结 : 成员函数,如果是一个对成员变量只进行读访问的函数->建议加const,这样const对象const对象都可以使用 成员函数,如果是一个对成员变量要进行读写访问的函数->不能加const...,否则不能修改成员变量 下面是对权限放大的举例说明 取地址及const取地址操作符重载 这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 要重载,比如想让别人获取到指定的内容

    14210
    领券