关于重载函数返回值有关问题
关于重载函数返回值问题#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.不报错是因为它本身就是正确的
一般情况下,返回引用的目的是为了避免发生一次拷贝构造函数的调用,当你的类很复杂的时候,会大大降低效率