如何让我的BigInt和BigFraction类与C ++中的基本数据类型进行交互

时间:2010-07-08 13:59:11

标签: c++

我创建了自己的大整数类和大分数类(将分子和分母存储为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;)时会遇到各种重载解析问题。

如何实现我想要的行为(尽可能轻松)?

2 个答案:

答案 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 intunsigned intsigned long intunsigned long intsigned long long intunsigned long long int重载它