当类中用很多成员变量,如果输出成员函数,在不重载输入输出运算符的情况下,就显得很麻烦看下面这个例子:
class Point { private: 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; } double GetX() { return m_dX; } double GetY() { return m_dY; } double GetZ() { return m_dZ; } };
Point cPoint(5.0, 6.0, 7.0); cout << "(" << cPoint.GetX() << ", " << cPoint.GetY() << ", " << cPoint.GetZ() << ")";
friend ostream& operator<< (ostream &out, Point &cPoint);
class Point { private: 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); 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 << ")"; return out; }
然后,就可以这样输出了:
Point cPoint(5.0, 6.0, 7.0); cout << cPoint;
下面验证一下结果:
int main() { Point cPoint1(2.0, 3.0, 4.0); Point cPoint2(6.0, 7.0, 8.0); using namespace std; cout << cPoint1 << " " << cPoint2 << endl; return 0; }
(2.0, 3.0, 4.0) (6.0, 7.0, 8.0)很自然地,输入运算符的重载:
istream& operator>> (istream &in, Point &cPoint) { in >> cPoint.m_dX; in >> cPoint.m_dY; in >> cPoint.m_dZ; return in; }