【发布时间】:2019-04-27 13:41:30
【问题描述】:
我正在构建一个大数字类,但我面临一个我自己无法解决的问题。
首先,类是这样的:
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
注意:候选人是:
注意:运算符
注意:bool bigNumber::operator
如何对 bigNumber 类进行类型转换,以便:
-
不再出现此错误
-
不使用显式类型转换
-
总是将 int 转换为 bigNumber 以免丢失精度(我观察到在我写
a<b时它没有这样做)
【问题讨论】:
-
如何对 bigNumber 类进行类型转换 -- 我建议不要这样做。即使您要编译代码,您知道何时何地调用您的运算符 int() 吗?相反,只需创建一个
to_int()函数。 -
因为我希望它们像 int 或 long long 一样使用。
-
说真的,如果你使用你的类编写了一个非玩具程序,我敢打赌你会发现
operator int()几乎不会在任何地方使用。如果确实需要使用它,只需创建一个to_int()函数,如前所述。然后代码将被编译,编码器将明确地看到正在发生的事情,而不是调用对 int() 的秘密调用。 -
friend std::ostream& operator<<(std::ostream&, bigNumber);另外,第二个参数应该是const bigNumber&,而不是值类型。
标签: c++ class casting type-conversion