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

在cpp中的一元运算符重载中,如何决定我们需要将运算符号放在对象的哪一侧?

在cpp中的一元运算符重载中,我们需要将运算符号放在对象的左侧或右侧取决于运算符的性质。一元运算符是只操作一个操作数的运算符。

对于前置一元运算符,运算符号应该放在对象的左侧。这意味着运算符函数将作为对象的成员函数进行重载。例如,如果我们想要重载对象的前置递增运算符 "++",我们可以这样定义运算符函数:

代码语言:txt
复制
class MyClass {
public:
    MyClass& operator++() {
        // 实现递增操作
        return *this;
    }
};

对于后置一元运算符,运算符号应该放在对象的右侧。这意味着运算符函数将作为全局函数进行重载,并且需要一个额外的整型参数来区分前置和后置版本。例如,如果我们想要重载对象的后置递增运算符 "++",我们可以这样定义运算符函数:

代码语言:txt
复制
class MyClass {
public:
    MyClass operator++(int) {
        MyClass temp = *this;
        // 实现递增操作
        return temp;
    }
};

需要注意的是,前置和后置一元运算符的返回类型是不同的。前置一元运算符返回的是对象的引用,以便支持连续操作,而后置一元运算符返回的是对象的副本。

总结起来,决定将一元运算符放在对象的哪一侧取决于运算符的性质,前置一元运算符放在对象的左侧,后置一元运算符放在对象的右侧。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

前言 本文将深入探讨C++运算符重载,重点讲解赋值运算符、前置/后置++运算符、取地址运算符重载方法,以及const成员函数定义和使用方法。...通过日期类实现示例,展示运算符重载和const成员函数实际应用具体代码实现,帮助读者更好地理解和运用这些C++特性。 博客主页: 酷酷学!!! 感谢关注~ 正文开始 一....函数名字为:关键字operator后面接需要重载运算符符号。..., 此时用户再在类外实现一个全局赋值运算符重载, 就和编译器类中生成默认赋值运算符重载冲突了, 故赋值运算符重载只能是类成员函数....,没有函数名修饰, 只能在内部使用, 而普通函数.h文件写之后, 会被展开到, test.cpp和Date.cpp会重复定义, 导致报错 Date.cpp 这里计算两个日期相加比较难算, 可以对比数进位

5310

运算符重载基本规则和习惯用法是什

运算符重载通用语法 重载时,你不能更改 C++ 内置类型运算符含义,只能对自定义类型[1]运算符进行重载。也就是,运算符两边操作数至少有一个是自定义类型。...可以被重载运算符如下: 二元算术运算符 + - * / % += -= *= /= %=;一元前缀运算符 + -;一元前缀后缀运算符 ++ --。...比如输入输出运算符(>),它们左操作数是标准流对象(stream),我们无法对其进行修改。 那么这么多运算符如何选择是作为成员函数还是非成员函数呢?...., Nov, Dec} 你想为它重载递加和递减运算符,但是你是无法实现它们为成员函数,因为 C++ ,枚举类型压根就没有成员函数这一说。...全局 new 和 delete 上面已经说过了,重载全局 new 和 delete,其实是替换标准库运算符。但是,我们很少需要去重载全局 new 和 delete。

73910
  • 【C++阅览室】类和对象

    类声明放在.h文件,成员函数定义放在.cpp文件,注意:成员函数名前需要加类名:: 一般情况下,第二种使用更广泛。...拷贝构造函数典型调用场景: 使用已存在对象创建新对象 函数参数类型为类类型对象 函数返回值类型为类类型对象 赋值运算符重载 C++为了增强代码可读性引入了运算符重载运算符重载是具有特殊函数名函数...函数名字为:关键字operator后面接需要重载运算符符号。...函数原型:返回值类型 operator操作符(参数列表) 注意: 1.不能连接其他符号从而创造一个新操作符:如operator@ 2.重载操作符必须有一个类类型操作符 3.用于内置类型运算符时...前置++和后置++重载 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载 C++规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递,编译器

    4610

    Kotlin语法基础之运算符

    这个时候则调用则是String重载plus方法,后面我们会具体介绍运算符重载,KotlinString源码如下: ?...Kotlin语言中判断一个对象是否为空有两种方式,第一种就是如同Java语言一样,使用if-else进行判空;另一就还是使用操作符 “?” 进行判断。 // Java语言中我们使用判空方法。...: 从右到左 13 =、+=、-=、/=、%=、&=、|=、^=、~=、>=、>>>= 从右到左 运算符重载 预定义运算符操作对象只能是基本数据类型,实际上,对于很多我们自定义对象也需要有类似的运算操作...实现过程,首先把指定运算表达式转化为对运算方法调用,运算对象转化为运算符方法实参,然后根据实参类型来确定需要调用达标函数,之后Kotlin会将对应符号运算切换到方法之中。...如Float类型针对 “+” 运算符所定义: ? 重载一元运算符 一元前缀操作符 表达式 转换方法 +a a.unaryPlus() -a a.unaryMinus() !

    2.9K50

    C++运算符重载详解(日期类实操)

    C语言中,对于内置类型,我们可以根据符号>、<、==等去直接比较大小,但是对于自定义来说,肯定不能直接比较大小,例如下面的日期类,想要比较两个两个日期大小,或者相差多少天,直接写运算符肯定是不行。...函数名字为: 关键字operator后面接需要重载运算符符号。 函数原型: 返回值类型 operator操作符(参数列表)。...注意: 不能通过连接其他符号来创建新操作符:比如operator@  重载操作符必须有一个类类型参数 用于内置类型运算符,其含义不能改变,例如:内置整型+,不 能改变其含义 作为类成员函数重载时,..._year++; } } return tmp; } 重载过程注意点: 构造函数如果声明和定义分离,声明需要将参数赋缺省值,定义不需要写,以防混淆。...2、前置++后置++重载区别  // 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载  // C++规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递

    4910

    【C++】泛型编程 ⑪ ( 类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码 )

    函数声明 和 实现 写在相同 .cpp 源码文件 ; 类模板 函数实现 类外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件 ; 博客 【C++】泛型编程 ⑨ (...类模板运算符重载 - 函数声明 和 函数实现 写在同一个类 | 类模板 外部友元函数问题 ) 实现了第一种情况 , 类模板 函数声明 与 函数实现 都写在同一个类 , 也就是没有分开进行编码...; 博客 【C++】泛型编程 ⑩ ( 类模板运算符重载 - 函数实现 写在类外部同一个 cpp 代码 | 类模板 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 类模板 ...函数实现 类外部进行 , 写在 一个 cpp 源码文件 ; 本篇博客 , 开始分析 第三种 情况 , 函数实现 类外部进行 , 函数声明 和 实现 写在不同 .h 和 .cpp 源码文件...; 一、类模板运算符重载 - 函数实现 写在类外部不同 .h 头文件和 .cpp 代码 1、分离代码 后 友元函数报错信息 - 错误示例 上一篇博客 【C++】泛型编程 ⑩ ( 类模板运算符重载

    23110

    重载运算符操作说明(一)

    重载运算符有特殊名字函数: 重载运算符名字由关键字operator 和其后要定义运算符号共同组成。 重载运算符也包含返回类型,参数列表,以及函数体。...重载运算符函数参数数量与该运算符作用运算对象数量一样多。比如 一元运算符有一个参数,二元运算符有两个参数。...当运算符作用于内置类型运算对象时,我们无法改变该运算符含义 例: int operator+(int , int);//错误,不能为int 重定义内置运算符 总结:只能重载已有的运算符,无权发布新运算符号...当我们定义运算符时,必须首先判断成员函数还是普通非成员函数,决定是将其声明为类成员函数还是声明为一个普通非成员函数。...下面的准则有助于我们运算符定义为成员函数还是普通非成员函数做出抉择: ●赋值(=)、下标([])、调用(l)和成员访问箭头(->)运算符必须是成员。

    19920

    Python和Scala操作符

    今天要聊是操作符,我们可以看到Scala和Python里如何给一个自定义对象加上操作符。...+符号这种方法,Scala里被称为操作符表示法,这个表示法使我们可以不必用.号去调用对象方法。...,~符号,不过不同于+符号直接使用+作为符号名,一元操作符使用'unary_'加上操作符表示。除了运算符外,还有一种符号叫做逻辑操作,例如,>=返回比较结果Boolean值。...scala> 2.unary_- res0: Int = -2 回过头来看看Python操作符重载,这个重载是名副其实重载,Python通过使用操作符重载使得用户定义对象可以使用二元运算符一元运算符...我们可以简单实现一个二元向量类做为示例(Scala和Python都有更好库去实现一个向量,例子向量仅仅只是为了展示如何重载运算符,而且Python实现也没有加上类型检查) 0.更好显示

    42920

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

    今日更新了类与对象运算符重载、const成员、取地址重载内容 欢迎大家关注点赞收藏⭐️留言 赋值运算符重载 运算符重载 C++为了增强代码可读性引入了运算符重载运算符重载是具有特殊函数名函数...函数名字为:关键字operator后面接需要重载运算符符号。...此时用户再在类外自己实现 一个全局赋值运算符重载,就和编译器类中生成默认赋值运算符重载冲突了,故赋值 运算符重载只能是类成员函数。...// 注意:后置++是先使用后+1,因此需要返回+1之前旧值,故实现时需要先将this保存一份,然后给this + 1 //而temp是临时对象,因此只能以值方式返回,不能返回引用...,表明该成员函数不能对类任何成员进行修改。

    14010

    【c++】类和对象(五)赋值运算符重载

    比如,你可以定义加号运算符(+)如何在你自定义数据结构上进行运算 什么意思呢,我们来讲解:首先我们定义日期类Date,并实例化两个对象: class Date { public: Date(int...,顺序不同,意思刚好相反 我们有两种方式进行调用,这两种方式是相同: 在上面的讲解之后,相信大家对运算符重载有了一定了解,他就是允许自定义对象使用运算符,它返回值是根据运算符决定,比如完成加减操作...此时用户再在类外自己实现一个全局赋值运算符重载,就和编译器类中生成默认赋值运算符重载冲突了,故赋值运算符重载只能是类成员函数 如果我们不写赋值运算符重载,编译器是否会默认生成呢?...,构造函数,默认申请了10个元素空间,然后存了4个元素1 2 3 4 s2对象调用构造函数创建,构造函数,默认申请了10个元素空间,没有存储元素 由于Stack没有显式实现赋值运算符重载,编译器会以浅拷贝方式实现一份默认赋值运算符重载即只要发现...1.4前置++和后置++重载 C++,前置++和后置++运算符都可以被重载,以提供用户定义类型(比如类)自增功能。

    18510

    【C++干货基地】特殊函数名函数:赋值运算符重载

    函数名字为:关键字operator后面接需要重载运算符符号。...** 1.1 == 运算符重载 下面我们就来实践一下再日期类 == 运算符如何重载, 以往我们 内置类型 == 运算符返回都是bool 类型 这样的话返回类型就确定了 运算符重载 关键字是 operator...前面的几个赋值运算符重载比较简单,只是为了完成类是如何比较而赋值运算符就是我们这里比较关键了 赋值运算符重载 主要是赋值,把一个对象赋值给另一个对象 而 拷贝构造函数 主要是,同类型对象创建初始化时调用...this指针 例如d1 == d2 虽然我们是这样写但是会转换为 d1.operator==(d2) 这样,那前置 ++ 和后置++ 都是一元操作符且运算符都是一样的如何进行重载呢?...而我们后置++ 返回是++之前值先使用在++所以需要返回+1之前旧值,故实现时需要先将this保存一份,然后给this+1 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置

    6000

    C++初阶类与对象(三):详解复制构造函数和运算符重载

    函数名字为:关键字operator后面接需要重载运算符符号。...注意以上5个运算符不能重载。笔试会有 2.2放在哪里 全局处 运算符重载成全局就需要成员变量是公有的,那么问题来了,封装性如何保证?...不会这样干 使用友元函数 友元函数后面会给大家详解,在这里先下结论:能不使用友元函数就不使用 放在类里面 我们选择直接重载成成员函数 2.3运算符重载示例 我们就先使用大家最为熟悉日期类作为演示...例如,如果你重载了加法运算符 +,那么当你程序中使用 + 运算符时,编译器会根据运算符左右操作数类型来决定调用哪个函数 2.3.1日期相比==和>(开胃小菜) class Date { public...std::ostream是一个抽象类,它不能被直接实例化 std::cout是标准输出流对象,已经标准库定义好了,并且支持输出运算符<<重载,所以传入参数就好了 3.const成员 将const

    17610

    运算符重载

    很多C++运算符已经被重载,例如 将解引用符号*,但他用于数值之间就是乘积,C++根据操作数数目和类型来决定采用哪种操作。...C++允许将运算符重载扩展到我们自己定义类型,例如可以让两个对象相加,编译器根据操作数数目和类型决定使用哪种加法定义。...,并用表示数组类相加, 如 c = a + b 要重载运算符使用被称为运算符函数特殊函数形式,operatorop(argument-list) 例如 operator+()表示重载+运算符,...operator*()表示重载*运算符,op必须是有效C++运算符,斌是虚构符号 如@等。...,符合我们重载函数特征标,因此重载运算符函数就变成了 sale = s1.operator+(s2) 显式地调用s2对象,可以简单地使用运算符表示。

    11910

    类和对象):日期类实现

    1.3 日期类运算函数 对于运算函数,如果都将全部内容放到类,这样会使类内容看起来很多,因此我们这样操作:对于常用或者较短函数我们可以放在当成内联,对于这些运算函数采取声明和定义分离形式展示...(分离后,函数定义采用类::限定符来确定是属于这个类函数),并且我们将这些运算能进行一定复用从而减少代码量 框架搭建好之后,就需要利用我们上个文章运算符重载内容将日期加、减、等操作进行一系列实现...此外,仍有一种方式,就是先通过运算符重载比较函数比较日期大小,再拷贝小日期为一个新对象,判断这个对象与大是否相等,不相等就++这个对象运算符重载) 方法1:直接根据基准量求天数函数,再相减 那我们来看看代码...因此,为了避免这样情况,我们要将其修改成不用this指针形式,进而推出,我们要将这个运算符重载函数从类里面拿出来,进行单独定义。...会变成:d.operator>(*this),而d在这个函数是const限定不可修改,传入>运算符重载之后,就会使得权限放大,因此,我们也需要对这些比较运算符this指向没人进行const

    80400

    C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)

    函数名字为:关键字operator后面接需要重载运算符符号。...此时用户再在类外自己实现一个全局赋值运算符重载,就和编译器类中生成默认赋值运算符重载冲突了,故赋值运算符重载只能是类成员函数。 3....Stack 类缺少拷贝构造函数和赋值运算符重载,因此执行对象拷贝时会出现浅拷贝问题,导致两个对象共享同一块内存。...具体来说,需要重载拷贝构造函数和赋值运算符,将原始对象数据复制到新对象,并使用新内存空间。 注意:如果类未涉及到资源管理,赋值运算符是否实现都可以;一旦涉及到资源管理则必须要实现。...后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递,编译器自动传递 // 注意:后置++是先使用后+1,因此需要返回+1之前旧值,故实现时需要先将this保存一份,然后给this

    8500

    C++运算符重载详解

    因此在这种情况下我们对类赋值运算符进行重载来解决对象浅拷贝问题。上面的情况除了要对一个类赋值运算符进行重载外还有为这个类建立一个拷贝构造函数。...,为了解决这个问题我们可以对实现下标索引运算符。...类型转换运算符 描述 值 运算符种类 各种数据类型 是否支持类成员 YES 是否支持普通函数 NO 运算单元 一元 返回类型 各种数据类型 实际工作我们有些方法或者函数只接受特定类型参数。...我们可以通过函数运算符来将一个对象当做普通函数来使用,这个意思就是说我们可以某些接收函数地址作为参数方法传递一个对象,只要这个类实现函数运算符并且其中参数签名和接收函数参数签名一致即可。...我们知道C++不支持闭包机制,但是某种程度上来说我们可以借助函数运算符重载方式来实现这种类似闭包能力。 10.

    1.4K30

    什么是运算符重载

    前言 本文要点: 什么是运算符重载 为什么要重载运算符 哪些运算符不可以重载 哪些运算符不建议重载 应该遵循哪些原则 如何重载运算符 什么是运算符重载 如果还不知道什么是重载,可以参考《什么是函数重载...为什么要重载运算符 前面也已经说了,操作符重载可以让运算符作用于类类型对象,而对于有些作用于对象运算符,也可以不改变含义情况下自定义操作,那么为什么要这么做呢?...如何重载 运算符重载函数函数名由operator后面跟着要重载运算符组成。...+,即自增运算符我们都知道自增运算符有前置和后置,但是它们作用对象数量都是一个,该怎么区分呢?...,因此它参数数量应该和运算符作用对象一样多,也就是说,一元运算符有一个参数,二元运算符有两个参数。

    1.6K20

    JavaScript-算数运算符

    2.3 重载 加法运算符是在运行时决定,到底是执行相加,还是执行连接。也就是说,运算不同,导致了不同语法行为,这种现象称为“重载”(overload)。...由于加法运算符存在重载,可能执行两种运算,使用时候必须很小心。 ? 上面代码,由于从左到右运算次序,字符串位置不同会导致不同结果。...上面代码,减法、除法和乘法运算符,都是将字符串自动转为数值,然后再运算。 2.4 对象加法 (1)如果运算子是对象,必须先转成原始类型值,然后再相加。...这些语言中运算符有着比其他单目运算符(如一元 + 或一元 - )更高优先级。但是作为例外, Bash ,** 运算符被设计为比单目运算符优先级更低。...(2)最新 JavaScript(ES2016) ,禁止使用带歧义运算表达式。比如,底数前不能紧跟一元运算符(+/-/~/!/delete/void/typeof) ? 7.3 示例 ?

    1.2K40

    Swift基础 基本运算符

    高级运算符涵盖了Swift高级运算符,并描述了如何定义自己自定义运算符,并实现您自己自定义类型标准运算符。 术语 运算符一元、二进制或三元: 一元运算符对单个目标(如-a)进行操作。...操作符影响值是操作数。表达式 1 + 2 ,+ 符号是一个中缀操作符,它两个操作数是值 1 和 2 。...一元减号运算符 数字值符号可以使用前缀-(称为一元减号运算符)切换: let three = 3 let minusThree = -three // minusThree equals...equals -6 虽然一元运算符实际上什么都没做,但当使用一元运算符进行负数时,您可以使用它来代码为正数提供对称性。...因为1小于2(1,"zebra")被认为是小于(2,"apple"),无论元组任何其他值如何。"zebra"不亚于"apple"并不重要,因为比较已经由元组第一个元素决定了。

    8200

    C++ 重载运算符重载函数

    C++ 重载运算符重载函数 C++ 允许同一作用域中某个函数 和运算符 指定多个定义,分别称为函数重载运算符重载。...当您调用一个重载函数 或重载运算符 时,编译器通过把您所使用参数类型与定义参数类型进行比较,决定选用最合适定义。选择最合适重载函数或重载运算符过程,称为重载决策。...C++ 函数重载 同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数形式参数(指参数个数、类型或者顺序)必须不同。您不能仅通过返回类型不同来重载函数。...这样,您就能使用自定义类型运算符重载运算符是带有特殊名称函数,函数名是由关键字 operator 和其后要重载运算符符号构成。与其他函数一样,重载运算符有一个返回类型和一个参数列表。...::条件运算符 #: 预处理符号 运算符重载实例 {#examples} 下面提供了各种运算符重载实例,帮助您更好地理解重载概念。

    70810
    领券