我创建了自己的大整数类和大分数类(将分子和分母存储为2个BigInt成员变量)。我重载了+, - ,*,/运算符,类很好。现在我想扩展它们,以便例如可以无痛地将BigInt添加到int中,请参阅下文:
int i;
BigInt I1, I2;
BigFrac F1, F2;
I1 = i * I2;
F1 = F2 - i;
F1 = I1 + F2;
我让BigInt通过为int,unsigned int,long和unsigned long添加构造函数来展示我想要的行为。因此,如果我尝试添加BigInt并进行简短的整数提升,则会转换为BigInt,然后调用+(BigInt,BigInt)。为了得到一个简短的添加到BigInt我重载+使用模板:
template <class T> const BigInt operator+(const T& A, const BigInt& B)
{ return BigInt(A)+B; }
现在,如果我尝试为BigFrac类做同样的事情,当我添加构造函数BigFrac(const BigInt&amp;)时会遇到各种重载解析问题。
如何实现我想要的行为(尽可能轻松)?
答案 0 :(得分:2)
我不明白为什么这需要成为一个模板:
template <class T> const BigInt operator+(const T& A, const BigInt& B)
{ return BigInt(A)+B; }
如果您有从T类型到BigInt的转换,并且您正好这样做,只需说:
const BigInt operator+(const Bigint& A, const BigInt& B)
{ return A+B; }
答案 1 :(得分:0)
如果你模仿operator+
,我认为你得到了太多的重载。虽然它有很多样板,但我建议仅为signed int
,unsigned int
,signed long int
,unsigned long int
,signed long long int
和unsigned long long int
重载它