如何重载 << 运算符以在 C++ 中打印数组的内容?

how do I overload the << operator to print the contents of an array in c++?

本文关键字:lt 打印 数组 C++ 运算符 何重载 重载      更新时间:2023-10-16

这是我的函数,当我运行程序时它崩溃了。我正在尝试打印出字符数组的内容。如何重载此运算符以打印出数组的内容而不会使程序崩溃?

ostream& operator<< (ostream& out, MyString& obj){
//print out mystring contents
int i = 0;
while(i < obj.size)
{
out << obj.data[i];
i++;
}
}

以下是我的数据成员:

int size;
int capacity;
char *data;

我进行了以下修改,但它仍然崩溃:

int i = 0;
while(obj.data[i] != '')
{
out << obj.data[i];
i++;
}
return out;

如果你这样声明你的函数,你需要返回一些东西:

return out;

没有它,您将有未定义的行为,其可能的结果之一是程序崩溃。

请在学习时设置编译器以将警告视为错误。

只是一个小提示,正如 NathanOliver 对你说的那样,ostreams 已经设置为打印字符数组,只要它们是以 null 结尾的,所以只要obj.data是以 null 结尾的字符串,你可以这样做:

ostream& operator<< (ostream& out, MyString& obj){
//print out mystring contents
if (obj.data != nullptr) // you might need this test, you might not, depending on the internal logic of MyString
out << obj.data;
return out;
}

你想返回你的ostream对象:

ostream& operator<< (ostream& out, MyString& obj) {
for (size_t i = 0; i < obj.size; ++i) {
out << obj.data[i] << " ";
}
return out;
}