operator ++(int)为什么返回值要加上const
作者&投稿:熊紫 (若有异议请与网页底部的电邮联系)
操作符重载函数,对含有括号两边的元素进行计算,返回比较的结果
这是重载赋值操作符,写成const是表示赋值操作时右值不能更改,右值就是传递进函数参数的引用类型
因为如果不加const就是可以连续++++,和普通的内置对象不一致所有的class都应该尽量参照内置对象的行为
在DeleteObject.h中向前声明了class Item;而在void DeleteItem(Item* p) 中去delete Item的对象,这样内存能释放掉,但是编译连接这个方法的时候并不知道Item析构函数的真正定义,所以就不会调用Item的析构函数。这是一个比较危险的错误(还好很多编译器都会有警告),可以有方案很好的解决这个一不留神可能造成的错误。Boost库中Utility小kit中就有解决这种问题的方法:template< typename T > inline void checked_delete(T * x) { typedef char type_must_be_complete[sizeof(T)? 1 : -1]; delete x;}
返回const就是防止再次更改返回const就是防止再次更改
希望版主多多发这样的帖子,我们以后要注意点。最好一开始不要给答案,让大家思考一下,才记忆深刻。
采欧君尔: ++i时产生的函数调用是class1.operator++();而i++时产生的函数调用是class1.operator++(int),会多生成一个0的参数来区分前置或后置 另外class1.operator++(int)好像是通过调用class1.operator++()来实现的, 所以++it的效率高 不懂也可...
霍林郭勒市19225538022: C++重载前置++与后置++的调用格式,谢谢,重载为成员函数的 - ?
采欧君尔: 调用格式就是++a和a++两种;a.operator++()是重载格式,且是前++重载格式;后++重载格式是在()中写个int,即写成a.operator++(int)即可.
霍林郭勒市19225538022: 这两种运算符++重载有什么区别 还有为什么参数是int 不是对象 - ?
采欧君尔: 前++运算符组成的表达式是左值,后++运算符组成的表达式为右值,所以它们的重载函数是有所区别的:1. 原型不同:前++运算符重载函数原型为:Pixel& operator++(); //返回类型为引用,没有int型形参 后++运算符重载函数原型为:Pixel operator++(int); //返回类型为对象,有int型形参(该形参并不使用,只是为了区别于前++)2. 函数体中处理方式不同:前++:直接对*this对象进行“+1”操作,返回*this对象.后++:先创建*this对象的副本(比如t),对*this对象进行“+1”操作,返回副本t.
霍林郭勒市19225538022: C++,operator重载的运算符我还是有一点不太懂.就是它的参数.单目的参数,双目的参数都咋写?还有前缀和后缀 - ?
采欧君尔: 前缀的++和--是operator++()和operator--() 后缀的是operator++(int)和operator--(int),其中的int是为了让编译器区分调用的是前缀还是后缀运算符,不要使用其中的值.双目的参数就像operator+(A a, B b).在一个类里面的双目运算符默认为以该对象作为第一个操作数,也就是B::operator+(A a)就相当于operator+(B b, A a).A+B的参数顺序可以自己选择.operator+(A a, B b)和operator+(B b,A a)都是可以的.重载运算符的参数可以是两个不一样的类.
霍林郭勒市19225538022: c++中运算符重载,前++和后++如何区分 - ?
采欧君尔: C++编辑器可以通过在运算符函数参数表中是否插入关键字int来区分这两种方式 声明: X operator++();//前缀方式 X operator++(int);//后缀方式 调用时,参数int一般传递给值0 X ob; ++ob; ob++;//隐式调用ob.operator++(int) ob.operator++(); ob.operator++(0);//显式调用ob.operator++(int),意为ob++
霍林郭勒市19225538022: ,后置自增运算符"++"重载为类的成员函数(设类名为A)的形式为 - ?
采欧君尔: A operator ++(int)
霍林郭勒市19225538022: operator ++(int)为什么返回值要加上const - ?
采欧君尔: 在DeleteObject.h中向前声明了class Item;而在void DeleteItem(Item* p) 中去delete Item的对象,这样内存能释放掉,但是编译连接这个方法的时候并不知道Item析构函数的真正定义,所以就不会调用Item的析构函数.这是一个比较危险的错误(...
霍林郭勒市19225538022: Date类的运算符重载 c++ - ?
采欧君尔: 如何重载增量运算符 ++ 和 -- 运算符++和--有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或operator--(int)...
霍林郭勒市19225538022: operator int() 是什么意思 - ?
采欧君尔: 运算符重载!!! 意思就是把int定义成一个运算符...有了这个函数之后可以执行相应的计算. 比如:operator +() 如果这个函数中把+定义成*的功能,那么就可用+来执行*的运算!——随便说一句,编译器系统就是用这种方法定义运算符的!