首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于重载函数返回值有关问题

2014-01-09 
关于重载函数返回值问题#include iostreamusing namespace stdclass num{public:num():n(1){}num &oper

关于重载函数返回值问题


#include <iostream>
using namespace std;
class num{
public:
num():n(1){}
num &operator++(){
num c;
num *p=&c;
p->n+=1;
return *p;    //问题①
//return c;   //问题②
}
void show(){
cout<<n<<endl;
}
private:
int n;
};
int main()
{
num i;
num s;
s = ++i;
i.show();
s.show();
return 0;
}

问题①: 这里我设的++重载运算函数,其中return的是*p,代表着返回一个num类,但是我设置的返回值是引用
         但为什么编译通过,而且运行也对呢?
问题②:问题①的情况如果对,也就是说返回一个类(即使声明是一用)是对的,那么return c也应该正确
         但是编译之后报错,说是返回值与返回类型不相符合,如果这个错了的话,那为什么第一个是对的
         求解答啊!!
[解决办法]

  你知道“引用”是什么吗?
int f(int & j){i++}; int i = 4; f(i); //得到i=5;

   这么用。

  同样i可以是自己定义的类型的对象。
int f(Ctest & j){i++}; Ctest i(4); f(i); 


 return c;编译不会报错。我用gcc4.8试过了。
[解决办法]
1.因为c是局部变量
2.不报错是因为它本身就是正确的
一般情况下,返回引用的目的是为了避免发生一次拷贝构造函数的调用,当你的类很复杂的时候,会大大降低效率

热点排行