我目前正在进行C ++任务,我有3种不同类型的对象。 Customer
,Hire
和Tour
。当我创建一个对象时,我会执行以下操作,从文件中读取数据,然后执行以下操作,
Customer* cust = new Customer(custId, Name, ...);
但是要求使用>>
运算符将此信息读入对象。也可以使用<<
将其写回。我怎样才能做到这一点?
非常感谢:)
答案 0 :(得分:4)
首先,您可能不需要在堆上创建对象。
完成这些更正后,您可以重载插入和提取操作符:
// assuming you declare these operators as friends of Customer
std::ostream& operator<<(std::ostream& os, const Customer& c)
{
os << c.data;
return os;
}
std::istream& operator>>(std::istream& is, Customer& c)
{
is >> c.data;
return is;
}
答案 1 :(得分:1)
这是一个非常好的reference(显然不是很好,因为我必须修复一些代码)重载 io运算符。不知道你的课程的细节,我不能告诉你更多,但我可以说流操作符的美妙之处在于它们提供了任何流类型对象的接口,而不仅仅是stdin和stdout。以下是该网站的一个小例子:
#包括
using namespace std;
class Point
{
私人的:
double m_dX,m_dY,m_dZ;
public:
Point(double dX=0.0, double dY=0.0, double dZ=0.0)
{
m_dX = dX;
m_dY = dY;
m_dZ = dZ;
}
friend ostream& operator<< (ostream &out, Point &cPoint);
friend istream& operator>> (istream &in, Point &cPoint);
double GetX() { return m_dX; }
double GetY() { return m_dY; }
double GetZ() { return m_dZ; }
};
ostream& operator<< (ostream &out, Point &cPoint)
{
// Since operator<< is a friend of the Point class, we can access
// Point's members directly.
out << cPoint.m_dX << " " << cPoint.m_dY << " " << cPoint.m_dZ << std::endl;
return out;
}
istream& operator>> (istream &in, Point &cPoint)
{
in >> cPoint.m_dX;
in >> cPoint.m_dY;
in >> cPoint.m_dZ;
return in;
}
IMO考虑重载这些运算符的最佳方法是利用以前编写的>>
和<<
,这样就可以构建一个链,实现这些运算符变得非常简单和方便。