Subj. Try to implement overloading << operator. If I done it void then everything work fine (see comment out) if I make it class of ostream& then the operator return to me some memory address. Please help
Code:
#ifndef Point_HPP // anti multiply including gates
#define Point_HPP
#include <sstream>
class Point
{
private: // declaration of private data members
double x; // X coordinate
double y; // Y coordinate
public: // public declaration of data members (in given example haven't ) and member functions
//----------- Declaration of Constructors -----------//
Point(); // Default constructor
Point(double newX, double newY); // Constructor
Point (const Point& ObjectOfClassPoint); //COPY constructor
~Point(); //
//----------- Declaration of Accessors member functions -----------//
std::ostream& ToString() ;
//void Point::ToString () const;
};
//----------- Implementaion of Global Ostream << Operator -----------//
/*std::ostream& operator<< (std::ostream &out, Point &cPoint)
{
// SHOULD BE WITHOUT friendness
// Point's members directly.
out << cPoint.ToString();
return out;
}*/
#endif // Point_HPP
Code:
#include <iostream>
#include "Point.hpp"
int main()
{
std::cout << "\n\t ---TEST OF Operator Overloading--- \n";
Point MyPoint(1455 , 1492 ); // Creating an object of Point using constructor
Point MySecondPoint (1517 , 1796 ); // Creating an object of Point using constructor
Point MyThirdPoint (1610 , 1882 ); // Creating an object of Point using constructor
MyPoint.ToString();
MySecondPoint.ToString();
std::cout << "\n";
std::cout << "\n std::cout << MySecondPoint.ToString();;\n\n\n ";
std::cout << "\n" << MySecondPoint.ToString();
std::cout << "\n --- Now some easy math --- ";
return 0 ;
}
Code:
#include "Point.hpp"
#include <iostream>
#include <sstream>
#include <cmath>
//----------- Implementation of Constructors -----------//
Point::Point() : x(0), y(0) // Default constructor (implemented using colon syntax )
{
std::cout << "hi my default constructor\n\n\t";
}
Point::Point(double newX, double newY) : x(newX), y(newY) // Constructor
{
//std::cout << "hi my constructor\n\n\t";
}
Point::~Point() // Destructor
{
//std::cout << "bye my point..\n";
}
Point::Point (const Point& ObjectOfClassPoint) // Copy constructor
{
//std::cout << "this is COPY constructor\n\n\t ";
x = ObjectOfClassPoint.x;
y = ObjectOfClassPoint.y;
}
//----------- Implementation of Accessor(s) member functions -----------//
std::ostream& Point::ToString ()
{// Function ToString should also be const also because of reason of mistaken modification of an object's value
std::ostringstream os; // std::stringstream object
os << " Point (" << x << ", " << y << ")\n"; // customization of output
os.str(); // str() function retrieve the string from the string buffer
return os;
}
/*void Point::ToString () const
{// Function ToString should also be const also because of reason of mistaken modification of an object's value
std::ostringstream os; // std::stringstream object
os << " Point (" << x << ", " << y << ")"; // customization of output
std::cout << os.str()<<"\n"; // str() function retrieve the string from the string buffer
}
*/