У меня есть класс 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;
}
почему я не могу использовать функцию член? Как это работает?
насколько проще, чем перегрузка op +, может ли это получить? – PlasmaHH
Что касается различий между свободной функцией и функцией-членом: http://stackoverflow.com/a/4421729/20984. Короче говоря, предпочитайте бесплатные функции, чтобы «int + BigInteger» и «BigInteger + int» работали одинаково (с функцией-членом, первая не будет работать). –