gpt4 book ai didi

c++ - 重载运算符 >> 和 << 以便它接受用户定义的对象

转载 作者:行者123 更新时间:2023-11-30 03:59:21 25 4
gpt4 key购买 nike

我有一个包含多个字符串(字符串指针)的对象(属于 myObj 类)。我想重载 >> 运算符,以便我可以一次读取多个字符串。

这个重载的运算符函数接受如下语句:

辛>>海峡;

计算<

唯一的问题是,当我填写一系列字符串时,似乎只有第一个字符串在流中得到正确处理。

插入:

istream &operator>>(istream &is, myObj &obj)
{
std::string line;

while (true)
{
std::getline(is, line);
if (not is)
break;
obj.add(line);
is >> line;
}

return is;
}

提取

ostream &operator<<(ostream &os, myObj const &obj)
{
for(size_t idx = 0; idx != obj.size(); ++idx)
os << obj[idx];
return os;
}

代码编译正常,但当我计算对象时,只打印第一个字符串,其他字符串被省略。

所以当我为 cin 提供:

Hi
Stack
Exchange

只会显示 Hi。

有人知道为什么会这样吗?

提前致谢!

P.S 我是 Stack Exchange 的新手,我正在尽我所能努力解决问题 :)

最佳答案

你的循环将像这样工作:

std::getline(is, line);

提取并存储中的“Hi”,提取换行符

obj.add(line);

将“Hi”添加到 obj

is >> line;

中提取并存储“Stack”,不提取后面的换行符

std::getline(is, line);

提取空字符串并将其存储在中,因为下一个读取的字符是换行符

obj.add(line);

将空字符串 ""添加到 obj

is >> line;

中提取和存储“Exchange”

std::getline(is, line);

什么都不提取(输入流结束)

if (not is)
break;

然后流结束,您的循环退出。

结论:你只存储了 Hi 和一个空字符串

关于c++ - 重载运算符 >> 和 << 以便它接受用户定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962333/

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