重载赋值运算符:不同的数据类型-不可能



我正在尝试做一些运算符重载可能无法做到的事情。我对重载赋值运算符特别感兴趣,它将接收另一个数据类型值作为其右侧值。它应该是这样的:

MyClass myclass = "hello world";    <--- Wrong?
MyClass myclass2;
Myclass myclass = myclass2;         <--- Right?

然后MyClass对象应该接收字符串并对其进行处理。不幸的是,根据我所读到的内容,只能将相同的数据类型值分配给自定义类。这是真的还是我弄错了?

这是我目前拥有的代码:

class MyClass {
public:
    MyClass() {};
    virtual ~MyClass();
    MyClass& operator = (const MyClass&);
private:
    char* string;
};
MyClass& MyClass::operator= (const MyClass& inc){
    string = inc;
}
int main(int argc, char** argv) {
    MyClass myclass = "hello world";
    std::cout << myclass;
}

正如你所看到的,我也想把对象cout作为一个字符串。基本上,我希望我的自定义类被视为一个字符串。我在谷歌和StackOverflow搜索引擎中的搜索否定了我的愿望,但它真的是这样吗?或者有解决办法吗?

期待收到您的来信,非常感谢您提前提供的帮助!


编辑:Rollie修复了主要问题。然而,我们将如何cout自定义对象MyClass的字符串值?这可能吗,因为对象输出只是被输出对象的内存地址?

MyClass myclass = "hello world";不是赋值-它是构造函数,在逻辑上与MyClass myclass("hello world");等价。重载构造函数和赋值运算符,就会得到您想要的行为!

还有一些评论:

1) 将成员变量命名为string不是一个好主意——这是一个非常常见的STL类型的名称

2) 直接设置这个变量就像一颗定时炸弹;您不是在复制字符串的,您只是在复制指针。切换到std::string,以便自动进行复制

3) 要使cout正常工作,请参阅stackoverflow.com/questions/5508857/how-domains-cout-actually-work 上的答案

最新更新