我有一堂课只有一个领域。我想重载0b110
运算符,以便可以直接将字符串分配给类的成员=
。这是我的示例,但是编译器说str
,我想问为什么?
cannot convert from const char[10] to strtype
答案 0 :(得分:3)
对于
strtype d = "NEWSPAPER";
要工作,您将必须提供一个以char const*
作为参数的构造函数。
此外,使用构造函数的初始化列表初始化成员变量,而不是在构造函数主体中进行赋值:
class strtype {
string str;
public:
strtype()
: str{ "Test" }
{}
strtype(string ss)
: str{ ss }
{}
strtype(char const *ss)
: str{ ss }
{}
strtype& operator=(strtype const &st) // *)
{
str = st.str;
return *this;
}
};
*)赋值运算符通常应引用const
,并返回对对象的引用。
答案 1 :(得分:1)
首先,您的运算符应将const-reference作为参数:
strtype operator= (const strtype &st)
第二,赋值运算符期望strtype
而不是const char*
。因此,只需为此重载另一个运算符:
strtype& operator= (const char* c) {
str = c;
return *this;
}
您还希望这样更改第一个运算符的内容:
strtype& operator= (const strtype &st) {
str = st.str;
return *this;
}
这很重要,因此在使用赋值运算符将新值分配给strtype对象时,您希望它更改值而不创建新值。这不会产生影响。如果您将多个分配链接在一起,则返回值就在那里,因此它可以使用一个分配的结果放入下一个分配。