C++ 重载运算符 成员 友元 const

假设有一个类 Time 现在重载了加法
Time operator+( Time &t )
现在问题是 有三个地方可以加上const 分别是 最前 变量前 最后, 那么问题是 这三个地方的const都有什么作用 丢掉可以吗 作为成员和友元解答一下 第二个问题是 函数什么时候返回引用 什么时候直接返回 有什么区别 为什么有时候没有const会报错

作为成员函数时
/*const*/ Time operator+(const Time &t ) const;

第一个const是修饰返回值的,但这样做意义不大,一般不写
第二个const是修饰参数(加法的右操作数)的,表示该函数(加法操作)不会修改参数的内容。如果不加const,则传入const的操作数时就会报错,所以一般要写上
第三个const表示这个函数本身不会修改自身对象(即*this,也是加法的做左操作数)的内容。如果不加cons,则对const的对象调用加法时就会报错,所以一般要写上
作为友元函数时
friend /*const*/ Time operator+(const Time &t1 ,const Time &t2) ;
第一个const与成员函数的第一个const同理
参数t1相当于成员函数时的*this(加法左操作数),因此其const与成员函数的末尾const同理
参数t2相当于成员函数时的参数t(加法右操作数),因此其const与成员函数的第二个const同理
友元函数末尾不能写const
===============================
对比两种运算重载吧
Time& operator=(const Time& t);
Time operator+(const Time& t)const;
const的作用不再赘述。现在来看返回值,赋值号重载返回的是对象自身的引用,因此返回值为引用。而加法重载返回的是加法的结果,是函数内部新创建的一个Time对象,因此要返回其实体(函数不能返回局部变量的引用)。总结来讲就是,返回之前已经存在的对象时可以返回引用,而新创建的对象必须返回实体
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-30
被传入的 t 在函数体里是不能被修改的,不然容易发生错误。这里const 就是个修饰作用,而且只能修饰传入对象,可以防止意外地改动该指针,起到保护作用,不要理解成常量的意思。
相似回答