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

时间:2013-07-25 19:00:36

标签: c++ class operators overloading variable-assignment

我正在尝试制作一些可能与运算符重载无关的内容。我对重载赋值运算符特别感兴趣,它将另一个数据类型值作为右手值。它应该是这样的:

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的字符串值?这是否可能,因为对象输出只是输出对象的内存地址?

1 个答案:

答案 0 :(得分: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

上的答案