2013-07-26 32 views
-3

这是一个主题将在另一篇文章中的通用办法,我后来发现:Operator overloading如何使输出和输入操作符过载?

但具体而言,这里是一小段代码:

class wordchecklist 
{ 
    string name,type; 
    unsigned int stats; 
}; 

我想要什么这样做,过载,输出操作,这样下面的代码工作

编辑:(记住它包含私人成员所以我宁愿通过建立某种形式的成员函数)这样做:

ofstream data(database.txt,ios::app); 
data<<wordchecklist; 
data.close(); 

让我database.txt文件包含:

mywordchecklistname mywordchecklisttype mywordcheckliststats

同去的输入操作员...

+0

您可能正在寻找与http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators –

回答

3

您必须定义一个非成员函数:

std::ofstream &operator <<(std::ofstream &stream, const wordchecklist &data) 
{ 
    stream << data.name << " " << data.type << " " << data.stats << std::endl; 
    return stream; 
} 

::operator >>做同样的事情。

ProTip:在标识符中使用CamelCapsunder_scores以使您的类具有可读的名称。

+0

相关的内容首先,它或多或少地建立了将'>>'和与用户定义类型相同的命名空间中的'<<'运算符。它可能是这里的全局名称空间,但当然并非总是如此,因为你的评论“对':: operator >>'做同样的事情 –

+0

当然,'operator >>'通常是一个数量级比'operator <<'更加困难,你应该在'operator <<'中考虑一些事情:例如,如果'wordchecklist :: name'可以包含空格,会发生什么事情 –

+0

@JamesKanze 1. Right。但是如果我们解释':: operator >>'作为运算符在任何名字空间中?2.如果我们假设输入文件格式与'operator <<'outputs相同,那么可以简单地使用'std :: getline ()'读一行然后解析它 – 2013-07-26 15:06:27