【发布时间】:2014-04-13 18:22:05
【问题描述】:
我正在研究 CBigInt 类。 CBigInt 类是具有无限长度的整数类。它看起来像这样:
class CBigInt{
public:
string number;
int sign;
CBigInt()
CBigInt(const int a);
CBigInt(const string a);
CBigInt& operator = (const string rhs);
CBigInt& operator=(const CBigInt& rhs);
CBigInt& operator=(int rhs );
CBigInt& operator+=(const CBigInt& rhs);
CBigInt operator+(const CBigInt& rhs);
CBigInt& operator+=(const string rhs);
CBigInt operator+(const string rhs);
CBigInt& operator *=(const CBigInt& rhs);
CBigInt operator*(const CBigInt& rhs);
CBigInt& operator*=(const string rhs);
CBigInt operator*(const string rhs);
friend ostream& operator<<(ostream& off, const CBigInt& big);
friend istream& operator>>(istream& in, CBigInt& big );
}
定义了所有运算符,并且在我能想到的所有示例中都可以找到作品,除了这个:
CBigInt a, b;
a *= 0;
编译器无法决定使用两个函数中的哪一个:
CBigInt& operator *=(const CBigInt& rhs);
or
CBigInt& operator *=(const string rhs);
我阅读了一些非常相似的问题,但没有太大帮助。
错误:
/home/michal/Desktop/prog/big/main.cpp||In function ‘int main()’:|
/home/michal/Desktop/prog/big/main.cpp|345|error: ambiguous overload for ‘operator*=’ in ‘a *= 0’|
/home/michal/Desktop/prog/big/main.cpp|345|note: candidates are:|
/home/michal/Desktop/prog/big/main.cpp|198|note: CBigInt& CBigInt::operator*=(const CBigInt&)|
/home/michal/Desktop/prog/big/main.cpp|247|note: CBigInt& CBigInt::operator*=(std::string)|
||=== Build finished: 4 errors, 0 warnings ===|
【问题讨论】:
-
不要使用运算符重载,特别是不要过度使用它,特别是不要与语法重载结合使用。只是我的两分钱;)
-
@DanielDaranas,我想说它使类的行为更加自然,但在这种情况下,如果使用
CBigInt(someInt)太多,请将其限制为CBigInt *= CBigInt或其他整数类型。CBigInt *= std::string看起来很别扭。 -
它的学校作业......它用于学习超载
-
@DanielDaranas:不知道你来自什么糟糕的语言,但在 C++ 世界里,我们一直都在使用这样的重载。
-
pastebin.com/jutYr9ma 我不知道 ... = 现在似乎完全错了.. 我错过了什么吗?
标签: c++ overloading operator-keyword