gpt4 book ai didi

c++ - 重载赋值运算符 : different datatypes - impossible?

转载 作者:行者123 更新时间:2023-11-28 00:42:56 24 4
gpt4 key购买 nike

我正在尝试做一些可能不可能用运算符重载来做的事情。我对重载赋值运算符特别感兴趣,它会接收另一种数据类型 值作为其右手值。它应该看起来像这样:

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

最佳答案

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 上查看答案

关于c++ - 重载赋值运算符 : different datatypes - impossible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com