我目前正在处理 C++ 任务,我有 3 种不同类型的对象。Customer
,Hire
和Tour
. 当我现在创建一个对象时,我执行以下操作,我从文件中读取数据,然后执行以下操作,
Customer* cust = new Customer(custId, Name, ...);
然而,要求是使用>>
运算符将此信息读入对象。也用<<
写回来。我怎样才能做到这一点?
非常感谢 :)
我目前正在处理 C++ 任务,我有 3 种不同类型的对象。Customer
,Hire
和Tour
. 当我现在创建一个对象时,我执行以下操作,我从文件中读取数据,然后执行以下操作,
Customer* cust = new Customer(custId, Name, ...);
然而,要求是使用>>
运算符将此信息读入对象。也用<<
写回来。我怎样才能做到这一点?
非常感谢 :)
首先,您可能不需要在堆上创建对象。
完成这些更正后,您可以重载插入和提取运算符:
// 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;
}
那么这里是一个非常好的参考(显然不是那么好,因为我必须修复一些代码)用于重载io 运算符。如果不了解您的类的详细信息,我无法告诉您更多信息,但是我可以说流运算符的美妙之处在于它们为任何流类型对象提供了一个接口,而不仅仅是标准输入和标准输出。这是该站点的一个小示例:
#include using namespace std; 类点{私人:双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 考虑重载这些运算符的最佳方法是利用以前编写>>
的<<
,这样你就可以构建一个链,实现这些运算符变得非常简单和方便。