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

effective C++ 条款21中关于返回对象的引用有关问题

2012-09-10 
effective C++ 条款21中关于返回对象的引用问题我的模仿着写了一个程序:class Caculate{public:Caculate(i

effective C++ 条款21中关于返回对象的引用问题
我的模仿着写了一个程序:
class Caculate
{
public:
Caculate(int d, int n):denominator(d), numerator(n){}
double getResult()
{
double result = (double)numerator/(double)denominator;
return result;
}
friend const Caculate& operator*(const Caculate& lhs, const Caculate& rhs);
private:
int denominator;//分母
int numerator;//分子
};

const Caculate& operator*(const Caculate& lhs, const Caculate& rhs)
{
Caculate result(lhs.denominator * rhs.denominator,lhs.numerator * rhs.numerator);
return result;

}
然后这样调用它:
Caculate a(2,1);
Caculate b(2,1);
Caculate c = a*b;
cout<<c.getResult()<<endl;
return 0;
感觉没啥问题啊?
后来我觉得是不是对返回引用理解错了,修改了一下程序:
const Caculate& operator*(const Caculate& lhs, const Caculate& rhs)
{
Caculate result(lhs.denominator * rhs.denominator,lhs.numerator * rhs.numerator);
Caculate &ref = result;
return ref;

}
这下总该是返回引用了吧?结果还是能正确执行,真心求教,我的有些基本概念不扎实。

[解决办法]
也就是因为出于具体的系统实现,返回局部变量引用很多时候都能够成功,所以前人才告诫一定不要这样做,否则如果每次尝试都必错,恐怕连傻子也不需要被告诫

热点排行