неоднозначная перегрузка в классе больших чисел - PullRequest
0 голосов
/ 26 ноября 2018

Я строю класс больших чисел и столкнулся с проблемой, которую не могу решить самостоятельно.

Прежде всего, класс выглядит так:

class bigNumber{
private:
    char v[BNmaxLength];
    int L;
    void setll(long long int);
    int comp(bigNumber);
    void erase0();
    void mult10(int);
    void div10(int);
public:
    bigNumber(){
        setll(0);
    }
    bigNumber(long long int q){
        setll(q);
    }
    bigNumber operator=(long long int);
    operator int();
    bool operator==(bigNumber);
    bool operator!=(bigNumber);
    bool operator<(bigNumber);
    bool operator<=(bigNumber);
    bool operator>(bigNumber);
    bool operator>=(bigNumber);
    bigNumber operator+(bigNumber);
    bigNumber operator+=(bigNumber);
    bigNumber& operator++();
    bigNumber operator++(int);
    bigNumber operator-(bigNumber);
    bigNumber operator-=(bigNumber);
    bigNumber& operator--();
    bigNumber operator--(int);
    bigNumber operator*(long long int);
    bigNumber operator*=(long long int);
    friend std::istream& operator>>(std::istream&, bigNumber&);
    friend std::ostream& operator<<(std::ostream&, bigNumber);
};

И я хотел написать что-то вроде этого:

bigNumber b=276743;
int a;
a=b;

, поэтому я перегрузил оператор приведения типов из bigNumber в int следующим образом:

bigNumber::operator int(){
    int a=0;
    for(int i=L;i>=1;--i){
        a*=10;
        a+=v[i];
    }
    return a;
};

, но потом, если я наберу

bigNumber b=276743;
int a=34672;
cout<<(b<a);

отображает эту ошибку:

неоднозначная перегрузка для оператора '<(типы операндов' bigNumber 'и' int ') </p>

примечание:Возможные варианты:

note: operator <(int, int) </p>

note: bool bigNumber :: operator <(bigNumber) </p>

Как можно типизировать bigNumberкласс для того, чтобы:

  1. больше не получать эту ошибку

  2. не использовать явное приведение типов

  3. всегда конвертируйте int в bigNumber, чтобы не потерять точность (я замечаю, что это не происходит, когда я пишу a<b)

1 Ответ

0 голосов
/ 26 ноября 2018

Во-первых, возможно, операции с потерями должны быть явными.

Во-вторых, иметь 3 перегрузки:

friend bool operator==(bignumber const&,bignumber const&);
friend bool operator==(int,bignumber const&);
friend bool operator==(bignumber const&,int);
...