Point.h
#prag...
#pragma once
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point(void);
Point( int x, int y );
Point( const Point &xPoint );
~Point(void);
void setX( int x );
int getX() const;
void setY( int y );
int getY() const;
Point & operator = ( const Point &xPoint );
bool operator == ( const Point &xPoint ) const;
bool includes( int cord_X, int cord_Y ) const;
bool includes( const Point &xPoint ) const;
void draw() const;
};
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Point.cpp
#prag...
#include "Point.h"
Point::Point( void )
{
this->x = 0;
this->y = 0;
}
Point::Point( int x, int y )
{
this->x = x;
this->y = y;
}
Point::Point( const Point &xPoint )
{
this->x = xPoint.x;
this->y = xPoint.y;
}
Point::~Point( void ) {}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Point::setX( int x ) // set X
{
this->x = x;
}
void Point::setY( int y ) // set Y
{
this->y = y;
}
int Point::getX() const // get X
{
return ( this->x );
}
int Point::getY() const // get Y
{
return ( this->y );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Point &Point::operator = ( const Point &xPoint )
{
if( this != &xPoint )
{
this->x = xPoint.x;
this->y = xPoint.y;
}
return ( *this );
}
bool Point::includes( int cord_X, int cord_Y ) const
{
return ( this->x == cord_X && this->y == cord_Y );
}
void Point::draw() const
{
cout << '.';
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool Point::operator == ( const Point &xPoint ) const
{
bool isEquality = false;
if( this->x == xPoint.x && this->y == xPoint.y )
{
isEquality = true;
}
return isEquality;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
PointCollection.h
#prag...
#pragma once
#include "Point.h"
const int MAXPoint = 100;
class PointCollection
{
private:
Point pts[ MAXPoint ];
int quantity;
public:
PointCollection( void );
PointCollection( const PointCollection &xPointCollection );
~PointCollection( void );
// To know how many Points are
// ..in the collection
int size() const;
PointCollection operator = ( const PointCollection &xPointCollection );
PointCollection &operator + ( const Point &xPoint );
Point &operator[]( int index );
const Point &operator[]( int index ) const;
bool isFull() const;
bool isEmpty() const;
bool includes( const Point &xPoint ) const;
int indexOf( const Point &xPoint ) const;
};
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
PointCollection.cpp
#prag...
#include "PointCollection.h"
PointCollection::PointCollection( void )
{
this->quantity = 0;
}
PointCollection::PointCollection( const PointCollection &xPointCollection )
{
this->quantity = xPointCollection.quantity;
for ( int i = 0 ; i < this->quantity ; i++ )
( this->pts )[ i ] = ( xPointCollection.pts )[ i ];
}
PointCollection::~PointCollection( void ) {}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
int PointCollection::size() const
{
return ( this->quantity );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Point &PointCollection::operator []( int index )
{
return ( ( this->pts )[ index ] );
}
const Point &PointCollection::operator []( int index ) const
{
return ( ( this->pts )[ index ] );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
PointCollection PointCollection::operator =( const PointCollection &xPointCollection )
{
this->quantity = xPointCollection.quantity;
for ( int i = 0 ; i < this->quantity ; i++ )
( this->pts )[ i ] = ( xPointCollection.pts )[ i ];
return ( *this );
}
PointCollection &PointCollection::operator +( const Point &xPoint )
{
(*this)[ this->quantity ] = xPoint;
(this->quantity)++;
return ( *this );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool PointCollection::isFull() const
{
return ( this->quantity == MAXPoint );
}
bool PointCollection::isEmpty() const
{
return ( this->quantity == 0 );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool PointCollection::includes( const Point &xPoint ) const
{
bool thisOne = false;
for ( int i = 0 ; i < this->quantity && ! thisOne ; i++ )
{
if( pts[ i ] == xPoint )
thisOne = true;
}
return ( thisOne );
}
int PointCollection::indexOf( const Point &xPoint ) const
{
int index = -1;
for ( int i = 0 ; i < this->quantity && index == -1 ; i++ )
{
if( pts[ i ] == xPoint )
index = i;
}
return ( index );
}
Line.h
#prag...
#pragma once
#include "Point.h"
class Linea
{
private:
Point begin;
Point end;
public:
Linea( void );
Linea( const Linea &xLinea );
Linea( Point XY1, Point XY2 );
~Linea( void );
Linea &operator = ( const Linea &xLinea );
bool includes( int cord_X, int cord_Y ) const;
bool operator == ( const Linea &xLinea ) const;
double m() const; // Pendiente
double b() const; // Intercept in Y
bool isVertical() const;
bool isHorizontal() const;
bool isDiagonal() const;
void draw() const;
};
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Line.cpp
#prag...
#include "Linea.h"
Linea::Linea()
{
}
Linea::Linea( Point XY1, Point XY2 )
{
this->begin = begin;
this->end = end;
}
Linea::Linea( const Linea &xLinea )
{
this->begin = xLinea.begin;
this->end = xLinea.end;
}
Linea::~Linea( void )
{
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Linea &Linea::operator =( const Linea &xLinea )
{
if( this != &xLinea )
{
this->begin = xLinea.begin;
this->end = xLinea.end;
}
return ( *this );
}
bool Linea::operator == ( const Linea &xLinea ) const
{
bool isEquality = false;
if( this->begin == xLinea.begin &&
this->end == xLinea.end )
{
isEquality = true;
}
return isEquality;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
double Linea::m()const
{
return ( (this->end.getY()) - (this->begin.getY()) ) / ((this->end.getX()) - (this->begin.getX()) );
}
double Linea::b()const
{
return ( this->end.getY() - (this->m() * this->end.getX()) );
}
bool Linea::isVertical () const
{
return ( ( (this->end.getX()) - (this->begin.getX()) ) == 0 );
}
bool Linea::isHorizontal () const
{
return ( ( (this->end.getY()) - (this->begin.getY()) ) == 0 );
}
bool Linea::isDiagonal () const
{
return ( this->isVertical() && this->isHorizontal() );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool Linea::includes( int cord_X, int cord_Y ) const
{
bool included = false;
if ( this->isHorizontal() )
{
if ( ( (this->begin).getY() == cord_Y ) &&
( (this->begin).getX() <= cord_X ) &&
( (this->end).getX() >= cord_X ) ||
( (this->begin).getX() >= cord_X ) &&
( (this->end).getX() <= cord_X ) )
included = true;
}
else if ( this->isVertical() )
{
if ( ( (this->begin).getX() == cord_X ) &&
( (this->begin).getY() <= cord_Y ) &&
( (this->end).getY() >= cord_Y ) ||
( (this->begin).getY() >= cord_Y ) &&
( (this->end).getY() <= cord_Y ) )
included = true;
}
else
{
if ( ( cord_Y == this->m() * cord_X + this->b() ) &&
( (this->begin).getX() <= cord_X ) &&
( (this->end).getX() >= cord_X ) ||
( (this->begin).getX() >= cord_X ) &&
( (this->end).getY() >= cord_Y ) ||
( (this->begin).getY() >= cord_Y ) &&
( (this->end).getY() <= cord_Y ) )
included = true;
}
return ( included );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Linea::draw() const
{
cout << '.';
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
LineCollectoin.h
#prag...
#pragma once
#include "Linea.h"
const int MAX = 100;
class LineCollection
{
private:
Linea lc[ MAX ];
int quantity;
public:
LineCollection(void);
LineCollection( const LineCollection &xLineCollection );
~LineCollection(void);
// To know how many Lines are
// ..in the collection
int size() const;
LineCollection operator = ( const LineCollection &xLineCollection );
LineCollection &operator + ( const Linea &xLinea );
Linea &operator [] ( int index );
const Linea &operator[]( int index ) const;
bool isFull() const;
bool isEmpty() const;
bool includes( const Linea &xLinea ) const;
int indexOF( const Linea &xLinea ) const;
friend ostream &operator << ( ostream &output, const LineCollection &xLineCollection );
friend istream &operator >> ( istream &input, LineCollection &xLineCollection );
};
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
LineCollection.cpp
#prag...
#include "LineCollection.h"
LineCollection::LineCollection( void )
{
this->quantity = 0;
}
LineCollection::LineCollection( const LineCollection &xLineCollection )
{
this->quantity = xLineCollection.quantity;
for ( int i = 0 ; i < this->quantity ; i++ )
( this->lc )[ i ] = ( xLineCollection.lc )[ i ];
}
LineCollection::~LineCollection( void ) {}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
int LineCollection::size() const
{
return ( this->quantity );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Linea &LineCollection::operator []( int index )
{
return ( ( this->lc )[ index ] );
}
const Linea &LineCollection::operator []( int index ) const
{
return ( ( this->lc )[ index ] );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
LineCollection LineCollection::operator =( const LineCollection &xLineCollection )
{
this->quantity = xLineCollection.quantity;
for ( int i = 0 ; i < this->quantity ; i++ )
( this->lc )[ i ] = ( xLineCollection.lc )[ i ];
return ( *this );
}
LineCollection &LineCollection::operator +( const Linea &xLinea )
{
(*this)[ this->quantity ] = xLinea;
(this->quantity)++;
return ( *this );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool LineCollection::isFull() const
{
return ( this->quantity == MAX );
}
bool LineCollection::isEmpty() const
{
return ( this->quantity == 0 );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool LineCollection::includes(const Linea &xLinea) const
{
bool thisOne = false;
for ( int i = 0 ; i < this->quantity && ! thisOne ; i++ )
{
if ( lc[i] == xLinea )
thisOne = true;
}
return ( thisOne );
}
int LineCollection::indexOF( const Linea &xLinea ) const
{
int index = -1;
for ( int i = 0 ; i < this->quantity && index == -1 ; i++ )
{
if ( lc[i] == xLinea )
index = i;
}
return ( index );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Page.h
#prag...
#pragma once
#include "PointCollection.h"
#include "LineCollection.h"
#include "RectangleCollection.h"
const int MAXPAGE = 100;
class Page
{
private:
int heigh;
int width;
public:
Page( void );
Page( int width, int heigh );
Page( const Page &xPage );
~Page( void );
void setWidth( int width );
int getWidth() const;
void setHeigh( int heigh );
int getHeigh() const;
bool operator == ( const Page &xPage ) const;
void draw() const;
Page &operator [] ( int index );
const Page &operator[]( int index ) const;
};
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
Page.cpp
#prag...
#include "Page.h"
Page::Page( void )
{
this->width = 0;
this->heigh = 0;
//int quantity = 0;
}
Page::Page( int width, int heigh )
{
this->width = width;
this->heigh = heigh;
}
Page::Page( const Page &xPage )
{
this->width = xPage.width;
this->heigh = xPage.heigh;
}
Page::~Page( void ) {}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Page::setHeigh( int heigh )
{
this->heigh = heigh;
}
void Page::setWidth( int width )
{
this->width = width;
}
int Page::getHeigh() const
{
return ( this->heigh );
}
int Page::getWidth() const
{
return ( this->width );
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
void Page::draw() const
{
bool included;
PointCollection pc;
LineCollection li;
RectangleCollection rec;
for( int y = 0 ; y < this->heigh ; y++ )
{
included = false;
for ( int x = 0; x < this->width ; x++ )
{
for ( int p = 0 ; p < pc.size() && !included ; p++ )
{
if ( pc[ p ].includes( x, y ) )
{
pc[ p ].draw();
included = true;
}
if ( included )
cout << ' ';
}
for ( int line = 0 ; line < li.size() && !included ; line++ )
{
if ( li[ line ].includes( x, y ) )
{
li[ line ].draw();
included = true;
}
if ( included )
cout << ' ';
}
for ( int r = 0 ; r < rec.size() && !included ; r++ )
{
if ( rec[ r ].includes( x, y ) )
{
rec[ r ].draw();
included = true;
}
if ( included )
cout << ' ';
}
}
cout << endl;
}
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
bool Page::operator ==( const Page &xPage ) const
{
bool isEquality = false;
if( this->heigh == xPage.heigh && this->width == xPage.width )
{
isEquality = true;
}
return isEquality;
}
Main.cpp
#prag...
#include "Page.h"
int main ()
{
Point p1( 5, 5 ), p2( 1, 1 );
Linea L;
Page pg( 15, 15 );
p1.draw();
L.draw();
L + p1;
pg.draw();
/*
if ( p1.includes( 1, 1 ) == true )
cout << "Point 1 & 2 are Equal" << "\n\n";
else
cout << "Point 1 & 2 are NOT Equal" << "\n\n";
*/
system("PAUSE");
return 0;
}
I'm Getting this Error when i try to sum the Line and the Dot to connect them even though i added an overloading of + in each collection. Please Help ?
------ Build started: Project: Project_Dibujo, Configuration: Debug Win32 ------
Compiling...
Main_.cpp
c:\documents and settings\mpayne007\desktop\december 19333 update\project_dibujo\project_dibujo\main_.cpp(15) : error C2784: 'std::_String_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_iterator<_Elem,_Traits,_Alloc>)' : could not deduce template argument for 'std::_String_iterator<_Elem,_Traits,_Alloc>' from 'Point'
c:\program files\microsoft visual studio 8\vc\include\xstring(438) : see declaration of 'std::operator +'
c:\documents and settings\mpayne007\desktop\december 19333 update\project_dibujo\project_dibujo\main_.cpp(15) : error C2784: 'std::_String_const_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_const_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_const_iterator<_Elem,_Traits,_Alloc>)' : could not deduce template argument for 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' from 'Point'
c:\program files\microsoft visual studio 8\vc\include\xstring(298) : see declaration of 'std::operator +'
c:\documents and settings\mpayne007\desktop\december 19333 update\project_dibujo\project_dibujo\main_.cpp(15) : error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'Point'
c:\program files\microsoft visual studio 8\vc\include\xutility(1809) : see declaration of 'std::operator +'
c:\documents and settings\mpayne007\desktop\december 19333 update\project_dibujo\project_dibujo\main_.cpp(15) : error C2676: binary '+' : 'Linea' does not define this operator or a conversion to a type acceptable to the predefined operator
Generating Code...
Compiling...
RectangleCollection.cpp
Generating Code...
Skipping... (no relevant changes detected)
Linea.cpp
LineCollection.cpp
NoteBook.cpp
Page.cpp
Rectangle.cpp
Build log was saved at "file://c:\Documents and Settings\MPayne007\Desktop\December 19333 Update\Project_Dibujo\Project_Dibujo\Debug\BuildLog.htm"
Project_Dibujo - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========