大数类中的模棱两可的重载

时间:2018-11-25 21:27:35

标签: c++ class casting type-conversion

我正在建立一个大型数字班,我面临着一个我自己无法解决的问题。

首先,该类如下所示:

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);

它显示此错误:

  

'operator <'的模棱两可的重载(操作数类型为'bigNumber'和'int')

     

注意:候选人是:

     

注意:operator <(int,int)

     

注意:bool bigNumber :: operator <(bigNumber)

我如何键入bigNumber类以便于:

  1. 不再收到此错误

  2. 不使用显式类型转换

  3. 总是将int转换为bigNumber以便不丢失精度(我在写a<b时没有这样做)

1 个答案:

答案 0 :(得分:0)

首先,可能有损的操作应该是明确的。

第二,有3个重载:

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