大きな整数演算をサポートする BigInteger というクラスがあります。BigInteger と組み込み型「int」の混合演算を実装したい。つまり、次のステートメントをサポートしたい
BigInteger a(10);
a + 10;
10 + a;
オーバーロードされた関数がそれを処理できることを知っています
BigInteger operator +(const BigInteger&, const int&);
BigInteger operator +(const int&, const BigInteger&);
その上、私は変換演算子がそれを処理することしかできないことを知っています。
operator int();
しかし、上記の関数サポートは BigInteger を int に変換するため、精度が失われます。オーバーロードされた関数よりも単純で精度を保つ方法を探しています。
みんな、ありがとう。
やってみる、
#include <iostream>
using namespace std;
class BigInteger
{
public:
BigInteger(const int& i)
{
cout << "construct: " << i << endl;
val = i;
}
// BigInteger operator +(const BigInteger& tmp) const
// {
// return BigInteger(val + tmp.val);
// }
friend ostream& operator <<(ostream& os, const BigInteger& bi)
{
os << bi.val << endl;
return os;
}
int val;
};
BigInteger operator +(const BigInteger& a, const BigInteger& b)
{
return BigInteger(a.val + b.val);
}
int main(int argc, const char *argv[])
{
BigInteger a(12);
cout << (a + 123) << endl;
cout << (1231 + a) << endl;
return 0;
}
メンバー関数を使用できないのはなぜですか? 使い方?