0

我正在尝试做一些可能无法与运算符重载有关的事情。我对重载赋值运算符特别感兴趣,它将接收另一个数据类型值作为其右手值。它应该如下所示:

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将对象作为字符串。基本上,我希望我的自定义类被视为一个字符串。我在 Google 和 StackOverflow 搜索引擎中的搜索否定了我的愿望,但实际上是这样还是有解决方法?

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


编辑: Rollie 解决了主要问题。但是,我们将如何cout获取自定义对象的字符串值MyClass?这是否可能,因为对象输出只是被输出对象的内存地址?

4

1 回答 1

3

MyClass myclass = "hello world";不是赋值 - 它是一个构造函数,并且在逻辑上等同于MyClass myclass("hello world");. 重载构造函数和赋值运算符,你就会得到你正在寻找的行为!

还有一些评论:

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

2)直接设置这个变量是个定时炸弹;你不是在复制字符串的,你只是在复制指针。切换到std::string以便副本自动发生

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

于 2013-07-25T19:02:00.873 回答