ok im stuck how do u print to the screen in the main file from a class?

this is what im doin

ostream &operator <<(ostream &outs, const Point &p)
{
	
	outs << "(" << p.getX() << ", " << p.getY() << ")"; // print out the value of the point as (x, y)
	
	return outs;
}

i want to print that in main.

this is my main

#include "line.cpp"
#include "point.cpp"

void main()
{
	Point xVal;
	Point yVal;

	xVal.setPoint(4.3,5.6);
	yVal.setPoint(6.8,3.9);
	xVal.getX();
	yVal.getY();
	xVal.printPolar();
	yVal.printPolar();
	<<();
	
}

how do i call the "<<" function so it prints right i keep gettin an error on the line

Recommended Answers

All 4 Replies

here are the other files.

Point.h

//*************************************************************************
//
// Point Class definition file:  point.h
//
//*************************************************************************

#ifndef point_h
#define point_h

#include <iostream>

using namespace std;

class Point
{
private:
	double x, // define a point as (x,y)
		   y;

public:
	Point();  // default constructor
	Point(double xVal, double yVal); // argument constructor

	void setPoint(double xVAl, double yVal); // allow change to current point value

	double getX() const; // return the x value
	double getY() const; // return the y value

	void printPolar() const; // print the polar coordinate form of the point (x, y)
};

ostream &operator <<(ostream &outs, const Point &p); // overload the insertion operator for point objects

#endif

Point.cpp

//***********************************************************************
//
// Point implementation file: Point.cpp
//
//***********************************************************************

#include <iostream>
#include <cmath>
#include <iomanip>

#include "point.h" // include the Point definition file

using namespace std;


const double PI = acos(-1); // define PI

//******************************************************************
//
// Constructor name: Point
//
// Purpose: creates a default Point object of (0,0) i.e. the origin
//
//*******************************************************************
Point::Point()
{
	x = y = 0.0;
}

//******************************************************************
//
// Constructor name: Point
//
// Purpose: creates a Point object of value (xVal, yVal)
//
// Input parameters: double xVal,  x coordinate
//                   double yVal,  y coordinate
//
//*******************************************************************
Point::Point(double xVal, double yVal)
{
	x = xVal;
	y = yVal;
}


//******************************************************************
//
// Function name: setpoint
//
// Purpose: changes the x and y values of the point
//			to new values
//
// Input parameters: double xVal  a new x value
//					 double yVal  a new y value
//
// Output parameters: none
//
// Return Value: void
//
//*******************************************************************
void Point::setPoint(double xVal, double yVal)
{
	x = xVal;
	y = yVal;
}

//******************************************************************
//
// Function name: getX
//
// Purpose: returns the current x value of the point
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: double; the current value of x
//
//*******************************************************************
double Point::getX() const
{
	return x;
}

//******************************************************************
//
// Function name: getY
//
// Purpose: returns the current y value of the point
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: double; the current value of y
//
//*******************************************************************
double Point::getY() const
{
	return y;
}

//******************************************************************
//
// Function name: printPolar
//
// Purpose: prints to cout the value of the point in polar coordinates
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: void
//
//*******************************************************************
void Point::printPolar() const
{
	double r = sqrt(pow(x,2) + pow(y,2)), // calculate the distance of the point from the origin
		   theta = atan(y / x); // calculate the angle of the point to the x-axis

	int ioFlags = cout.flags(); // save the cout flags for latter use

	cout << showpoint << fixed << setprecision(4); // set the cout object for 4 decimal places

	cout << r << '<' << theta; // print the radius and angle of the point use , for the angle symbol

	cout.flags(ioFlags); // restore the cout object to its original condition
}


//******************************************************************
//
// Function name: <<
//
// Purpose: prints to an ostream object the value of the point as (x, y) format
//
// Input parameters: outs and ostream object
//                   p a point object
//
// Output parameters: outs an ostream object
//
// Return Value: a reference to an ostream object
//
//*******************************************************************
ostream &operator <<(ostream &outs, const Point &p)
{
	
	outs << "(" << p.getX() << ", " << p.getY() << ")"; // print out the value of the point as (x, y)
	
	return outs;
}

line.h

//*************************************************************************
//
// Line Class definition file:  line.h
//
//*************************************************************************

#ifndef line_h

#define line_h

#include "point.h" //need the point definition file


class Line
{
private:
	Point p1, // define a line as two points
		  p2;

	double slope,         // slope of the line if it exists
		   y_intercept;   // y intercept of the line if it exists

	bool vertical;        // indicates if the line is vertical or not

    void calcSlpYInt(); // calculates the line slope and y intercept

public:
	Line();  // default Line constructor
	Line(double x1, double y1, double x2, double y2); // Line constructor with double arguments for the two points
	Line(const Point &P1, const Point &P2); // Line constructor with point arguments

	void setLine(double x1, double y1, double x2, double y2); // change the values of the line points with doubles
	void setLine(const Point &P1, const Point &P2); // change the value of the line points with new point objects

	Point getP1() const; // return the point p1 of the line
	Point getP2() const; // return the point p2 of the line

	double getSlope() const; //return the slope value if it exists
	double getYIntercept() const; // return the y intercept if it exits

    bool vert() const;  // returns a boolean value indicating if the line is vertical or not

};

ostream &operator <<(ostream &outs, const Line &l); // overload the insertion operator for line objects

#endif

line.cpp file

//*************************************************************************
//
// Line Class implementation file:  line.cpp
//
//*************************************************************************

#include <cstdlib>
#include "line.h"


using namespace std;


//******************************************************************
//
// Function name: calcSlpYint
//
// Purpose: calculates the slope and y intercept of the line object
//			to new values
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: void
//
//*******************************************************************
void Line::calcSlpYInt()
{
	if ( abs(p1.getX() - p2.getX()) < 0.0001 ) // check for a vertical line

			vertical = true;         // line is vertical
		else
		{                                    // line is not vertical so calculate
			slope = (p2.getY() - p1.getY()) / (p2.getX() - p1.getX());   //         slope
			y_intercept = p2.getY() - slope * p2.getX();   //         and y intercept
			vertical = false;
	    }

}


//******************************************************************
//
// Constructor name: Line
//
// Purpose: creates a default Line object containing the points (0,0) and (1,0)
//          i.e. a unit vector along the x-axis
//
//*******************************************************************
Line::Line():p1(0,0), p2(1,0)
{
   slope = y_intercept = 0; // for a horizontal line the slope and y intercept are 0
   vertical = false;        // it is not a vertical line

}

//******************************************************************
//
// Constructor name: Line
//
// Purpose: creates a Line object with points (x1, y1) and (x2, y2)
//
// Input parameters: double x1,  1st x coordinate
//                   double y1,  1st y coordinate
//                   double x2,  2nd x coordinate
//                   double y2,  2nd y coordinate
//
//******************************************************************
Line::Line(double x1, double y1, double x2, double y2):p1(x1, y1), p2(x2,y2)
{
	calcSlpYInt();
}

//******************************************************************
//
// Constructor name: Line
//
// Purpose: creates a Line object with Point objects P1 and P2
//
// Input parameters: P1,  1st point
//                   P2,  2nd point
//
//******************************************************************
Line::Line(const Point &P1, const Point &P2):p1(P1.getX(), P1.getY()), p2(P2.getX(), P2.getY())
{
	calcSlpYInt();

}


//******************************************************************
//
// Function name: setLine
//
// Purpose: changes the point values of the line
//			to new values
//
// Input parameters: double x1,  1st x coordinate
//                   double y1,  1st y coordinate
//                   double x2,  2nd x coordinate
//                   double y2,  2nd y coordinate
//
// Output parameters: none
//
// Return Value: void
//
//*******************************************************************
void Line::setLine(double x1, double y1, double x2, double y2)
{
	p1.setPoint(x1, y1); // change the value of point p1
	p2.setPoint(x2, y2); // change the value of point p2

    calcSlpYInt();
}


//******************************************************************
//
// Function name: setLine
//
// Purpose: changes the point values of the line
//			to new values
//
// Input parameters: P1 a point replacement for p1
//                   P2 a point replacement for p2
//
// Output parameters: none
//
// Return Value: void
//
//*******************************************************************
void Line::setLine(const Point &P1, const Point &P2)
{
	p1 = P1;
	p2 = P2;

    calcSlpYInt();
}


//******************************************************************
//
// Function name: getP1
//
// Purpose: returns the point object p1
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: Point; the current value of p1
//
//*******************************************************************
Point Line::getP1() const
{
	return p1;
}

//******************************************************************
//
// Function name: getP2
//
// Purpose: returns the point object p2
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: Point; the current value of p2
//
//*******************************************************************
Point Line::getP2() const
{
	return       p2;
}


//******************************************************************
//
// Function name: getSlope
//
// Purpose: returns the slope of the line
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: double the slope of the line
//
//*******************************************************************
double Line::getSlope() const
{
	return slope;
}


//******************************************************************
//
// Function name: getYIntercept
//
// Purpose: returns the y intercept of the line
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: double the y intercept of the line
//
//*******************************************************************
double Line::getYIntercept() const
{
	return y_intercept;
}


//******************************************************************
//
// Function name: vert
//
// Purpose: returns true if the line is vertical and false if the line is not vertical
//
// Input parameters: none
//
// Output parameters: none
//
// Return Value: bool the condition of the line in terms of being vertical
//
//*******************************************************************
bool Line::vert() const
{
	return vertical;
}


//******************************************************************
//
// Function name: <<
//
// Purpose: overloads the insertion operator to print out the equation of the line
//
// Input parameters: outs an ostream object
//                   l a line object
//
// Output parameters: outs an ostream object
//
// Return Value: a reference to an ostream object
//
//*******************************************************************
ostream &operator <<(ostream &outs, const Line &l)
{

	int ioFlags = outs.flags(); // keep current state of ostream object

	if(l.vert())                         // check if the line is vertical or not
	  outs << "x = " << l.getP1().getX(); // it is vertical so print the x = equation
	else                                  // not vertical so print the y=mx+b equation
	{
	  outs << "y = " << l.getSlope() << "x";
	  if(abs(l.getYIntercept()) > 0.001)       // only print the y intercept if it is non zero
	      outs << showpos << l.getYIntercept(); // print the + sign if the y intercept is positive
	}
	
	outs.flags(ioFlags); // return ostream object to original state

    return outs;
}

If you defined your operator<< correctly, which seems to be the case, then you don't need to do anything special. That's the nice thing about extending iostreams, you can use them just like you would the standard library stuff:

cout << xVal << ' ' << yVal << '\n';

oh didnt think it was that easy thanks

It's just that easy. Of course, if you want to get some really cool features going, it takes more work. But for the most part the simple stuff is enough.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.