关于运算符重载时 返回值的问题

a310394543 2011-12-15 11:18:47
#include<iostream>
using namespace std;
class num
{
public:
num()
{
n=99;
cout<<"creat0"<<endl;
}
num(int i)
{
n=i;
cout<<"creat1"<<endl;
}
~num()
{cout<<"destroyed"<<endl;}
num(num&a)
{
n=a.n;
cout<<"copy"<<endl;
}
int get() const{return n;}
void set(int x){n=x;}
const num operator+(const num&r)
{
return num(r.get()+n);

}
num &operator++()
{
++n;
return *this;
}
num operator++(int)
{
num temp(*this);
++n;
return temp;
}
num operator=(num &r) //重载"="运算符 并返回一个num类对象
{
return this->n=r.get(); //这里我认为是返回了n 可是编译还是过了 不理解原理 望解释
}


private:
int n;
};


int main()
{
num one(1),two(2),three;
three=two;
cout<<one.get()<<endl;
cout<<two.get()<<endl;
cout<<three.get()<<endl;
return 0;
}
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a310394543 2011-12-16
  • 打赏
  • 举报
回复
基本 明白了 谢谢LS诸位

分给第一个给答案的4F了
qscool1987 2011-12-15
  • 打赏
  • 举报
回复
编译肯定是能过的,这里three=two;
这是你的赋值函数
num operator=(num &r) //重载"="运算符 并返回一个num类对象
{
return this->n=r.get(); //这里我认为是返回了n 可是编译还是过了 不理解原理 望解释
}
这里你返回值是n,函数的返回类型是num,这里他有临时变量生成的,自动由int类型的n转换到num类型的一个临时变量
然后本来要发生临时变量的拷贝的,编译器优化了
飞天御剑流 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 a310394543 的回复:]
还有就是在第二行注释处 单补调试的时候 发现又创建了一个num类对象~~~

有什么必要? 为什么不直接把参数r.get()取得的值赋给this->n?
[/Quote]

原因与四楼一样。
飞天御剑流 2011-12-15
  • 打赏
  • 举报
回复
num operator=(num &r) //重载"="运算符 并返回一个num类对象
{
return this->n=r.get(); //这里我认为是返回了n 可是编译还是过了 不理解原理 望解释
}
-------------------------------------
因为你自定义了从int到num的转换构造函数,且没有用explicity修饰,n被隐式转换为了num。
iamnobody 2011-12-15
  • 打赏
  • 举报
回复
num operator=(num &r) //重载"="运算符 并返回一个num类对象
{
this->n=r.get(); //这里我认为是返回了n 可是编译还是过了 不理解原理 望解释
return *this;//返回值是num类型,而不是this->n的类型
}
黯然 2011-12-15
  • 打赏
  • 举报
回复

num operator=(num &r) //重载"="运算符 并返回一个num类对象
{
n=r.get();
return *this;//返回类型是num类,所以要return *this;
}
a310394543 2011-12-15
  • 打赏
  • 举报
回复
还有就是在第二行注释处 单补调试的时候 发现又创建了一个num类对象~~~

有什么必要? 为什么不直接把参数r.get()取得的值赋给this->n?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧