在C ++中使用运算符“ =”用值初始化对象

时间:2018-10-06 15:46:13

标签: c++ operator-overloading

我有一堂课只有一个领域。我想重载0b110运算符,以便可以直接将字符串分配给类的成员=。这是我的示例,但是编译器说str,我想问为什么?

cannot convert from const char[10] to strtype

2 个答案:

答案 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对象时,您希望它更改值而不创建新值。这不会产生影响。如果您将多个分配链接在一起,则返回值就在那里,因此它可以使用一个分配的结果放入下一个分配。