【发布时间】:2014-10-26 00:28:49
【问题描述】:
此代码是一个分数,用于添加/减去分数的多个输入。这是我的头文件:
#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;
class Fraction{
public:
Fraction(int , int );
int fraction(int,int);
void reduce_fraction(int *, int *);
Fraction& operator+(const Fraction&);
Fraction& operator-(const Fraction&);
friend ostream& operator<<(ostream &os, const Fraction& n);
friend istream& operator>>(istream &is, const Fraction& n);
};
#endif
这里是运算符代码的重载,这会导致从所有三个重载的“Frations”类型的右值中对“Fractions&”类型的非常量引用进行无效初始化的错误
Fraction& Fraction::operator+(const Fraction& n) {
int denom = *denomp * n.denom;
int numera = (*nump * n.numera) + (n.denom * n.nump);
return Fraction(numera,denom);
}
Fraction& Fraction::operator-(const Fraction& n) {
int denom = *denomp * n.denom;
int numera = (*nump * n.numera) - (n.denom* n.nump);
return Fraction(numera, denom);
}
Fraction& Fraction::operator=(const Fraction& n){
if(this==&n) return *this;
return n;
}
【问题讨论】:
-
operator +不应返回引用,operator -也是如此。两者都应该返回一个按值copy。我建议阅读this question,尤其是关于算术重载的部分。 -
operator+不应返回引用,因为它在语义上毫无意义。但从技术上讲,问题在于非常量(左值)引用(您的返回类型)无法绑定到临时变量(右值,您返回的内容)。这两个问题都可以通过按值返回来解决。 -
我是 C++ 新手,感谢您解释我不应该返回引用,但是您如何按值返回,我可以返回两个变量吗?
标签: c++ class operator-overloading