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