我正在尝试制作一些可能与运算符重载无关的内容。我对重载赋值运算符特别感兴趣,它将另一个数据类型值作为右手值。它应该是这样的:
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
的字符串值?这是否可能,因为对象输出只是输出对象的内存地址?
答案 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