gpt4 book ai didi

c++ - 对运算符进行试验会导致运算符错误不明确

转载 作者:行者123 更新时间:2023-11-28 00:07:31 25 4
gpt4 key购买 nike

我正在玩重载运算符。

当我使用 INTEGER 和 STRING 类时,一切都运行良好。

 class INTEGER {
private:
int iValue;

public:
INTEGER() {
iValue = 0;
}

int& operator= (int const& iParam) {
return iValue = iParam;
}

friend ostream& operator<< (ostream& os, const INTEGER& obj) {
return os << obj.iValue << endl;
}

operator int () const {
return iValue;
}

operator string () const {
ostringstream os;
os << iValue;
return string(os.str().c_str());
}
};


class STRING {
private:
string strValue;

public:
STRING () {
strValue = "";
}

string& operator= (string const& strParam) {
return strValue = strParam;
}

friend ostream& operator<< (ostream& os, const STRING& obj) {
return os << obj.strValue.c_str() << endl;
}

operator int() const {
istringstream ss(strValue);
int iValue;
ss >> iValue;
return iValue;
}
};


int main() {
INTEGER i1, i2;
STRING s1, s2;

i1 = 1;
s1 = "2";

i2 = i1 + s1;
s2 = i2;

cout << i1 << s1 << i2 << s2;

return 0;
}

输出:

1 2个 3个 3

但是如果我用

扩展我的 INTEGER 类
operator double    () const {
return (double)iValue;
}

(为下一节课 FLOAT 做准备)

编译器提示:在“operator INTEGER::int() const”和“operator INITEGER::double() const”之间存在歧义

  i2 = i1 + s1;

我不了解我的编译器,从未使用过浮点值。 i1 和 i2 来自 INTEGER 类,s2 来自 STRING 类,并且有一个 int()- 运算符。

请点亮我的心...

最佳答案

您尚未定义operator+(INTEGER,STRING),因此您的编译器必须使用内置运算符之一+。它可以使用 int+intdouble+int,因为 STRING 有一个到 intINTEGERintdouble。但这两个选择是模棱两可的。

恕我直言,你应该避免“有趣”的转换运算符,因为它们允许各种代码意外地工作,例如

STRING s;
std::cout << std::setw(s) << "oops";

而是直接定义算术运算符。

关于c++ - 对运算符进行试验会导致运算符错误不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com