Question: I need help with this homework. I only need the stubs filled in. The main file is Driver.cpp. The following files are here: Driver.cpp, Point.h,

I need help with this homework. I only need the stubs filled in. The main file is Driver.cpp. The following files are here: Driver.cpp, Point.h, Point2D.h, Point2D-impl.h, Point3D.h, Point3D-impl.h, Point3DWeighted.h, Point3DWeighted-impl.h, Point-impl.h, VectorUtilites.h, VectorUtilities-impl.h,

/*

* Driver.cpp

*

* Created on: Feb 3, 2018

* Author: kamilla

* If the input file containes invalid data, you need to

* terminate the program immediately.

* To terminate the program write a throw statement

* like this

*

* throw runtime_error("Some error message");

*

* You will find out how to use throw statements later

* when learning about exceptions. For the moment, just

* assume that it terminates the program.

*/

#include

#include

#include "Point3D.h"

#include "Point3DWeighed.h"

#include "VectorUtilities.h"

using namespace std;

namespace {

ifstream fin;

ofstream fout;

template

void printResult(

ostream &os,

const string &info,

const V &a,

const T &minDistance,

const P &minPoint

)

{

outputVector( os, a, info);

os <<" minDistance "<

}

template

void printResultOp(

ostream &os,

const string &info,

string &op,

V &a,

P &pointOp

)

{

outputVector( os, a, info);

os <<" pointOp "<

}

void testPoint3DWeighed()

{

cout<<" --------- testing PA3 Point3Weighed class "

<<"and abstract class Point, Point2D, Point3d, Point3DWeighed "

<<"standalone function findMinDistanceToOrigin() and create your "

<<"own standalone finction findMinDistanceBetweenTwoPoints() ";

// ifstream fin;

// ofstream fout;

// string fileNameI, fileNameO;

typedef Point3DWeighed MyPoint;

double minDistance;

MyPoint minPoint;

vector a;

fillVector(fin, a);

findPointMinDistanceToOrigin(a,minDistance,minPoint);

const string info = "testing vector of Point3DWeighed";

printResult( fout, info, a, minDistance, minPoint );

printResult( cout, info, a, minDistance, minPoint );

}

void testPoint3D()

{

cout<<" ----------- PA2 ch10-11 Class & Inheritnce part testing Point3D class ";

Point3D pp[5];

Point3D point[5];

double x,y,z;

cout<<"A. Test operator>> and getX, getY, getZ ";

for (int i=0;i<5;++i)

{

// Enter x, y and z from input file";

fin>>pp[i];

point[i].setPoint(pp[i].getX(),pp[i].getY(),pp[i].getZ());

}

cout<<"B. Test pp getX, getY, getZ "; //here test getX() and getY() functions

for (int i=0;i<5;++i)

{

cout<

<

<

<<" ";

}

cout<<"C. Test point getPoint and distance to origin "; //here test getPoint() function

for (int i=0;i<5;++i)

{

point[i].getPoint(x,y,z);

cout<

}

cout<<"D. Test operator<< and distance to origin ";

for (int i=0;i<5;++i)

{

cout << i

<< ". "

<< pp[i]

<< " distance to origin = "

<< pp[i].distanceToOrigin()

<< " ";

}

cout<<"E. Test operator<< and operator* (scalar multiplication) ";

{

double m = pp[0]*pp[1];

cout << pp[0]

<< " * "

<< pp[1]

<< " = "

<< m

<< " ";

}

cout<<"E. Test operator<< and operator+ ";

{

Point3D ppp = pp[0]+pp[1];

cout << pp[0]

<< " + "

<< pp[1]

<< " = "

<< ppp

<< " ";

}

}

void testOperations()

{

cout<<" -------- testing Point3DWeighed operators*,+,<,==,!= ";

cout<<"testing operator*, operator+, operator<, operator==,operator!= ";

typedef Point3DWeighed MyPoint;

MyPoint minPoint;

vector a;

string op="";

// MyPoint pointOp;

const string info = "testing operators";

fill2VectorsOp(fin, a, op);

if (op=="*")

{

fout<<*a[0]<<" ";

fout<

fout<<*a[1]<<" is ";

fout<<(*a[0])*(*a[1])<<" ";

cout<<*a[0]<<" ";

cout<

cout<<*a[1]<<" is ";

cout<<(*a[0])*(*a[1])<<" ";

}

fill2VectorsOp(fin, a, op);

if (op=="+")

{

fout<<*a[0]<<" ";

fout<

fout<<*a[1]<<" is ";

fout<<*a[0]+*a[1]<<" ";

cout<<*a[0]<<" ";

cout<

cout<<*a[1]<<" is ";

cout<<*a[0]+*a[1]<<" ";

}

fill2VectorsOp(fin, a, op);

if (op=="<")

{

fout<<*a[0]<<" ";

fout<

fout<<*a[1]<<" is ";

if (*a[0] < *a[1])

{

fout<<" true ";

}

else

{

fout<<"false ";

}

}

fill2VectorsOp(fin, a, op);

if (op=="==")

{

fout<<*a[0]<<" ";

fout<

fout<<*a[1]<<" is ";

if (*a[0]==*a[1])

{

fout<<" true ";

}

else

{

fout<<"false ";

}

}

fill2VectorsOp(fin, a, op);

if (op=="!=")

{

fout<<*a[0]<<" ";

fout<

fout<<*a[1]<<" is ";

if (*a[0]!=*a[1])

{

fout<<" true ";

}

else

{

fout<<"false ";

}

}

}

}

int main()

{

try {

string fileNameI, fileNameO;

cout <<"Enter input fileNameI and output fileNameO: ";

cin >> fileNameI >> fileNameO;

fin.open(fileNameI.c_str());

fout.open(fileNameO.c_str());

testPoint3D();

testPoint3DWeighed();

testOperations();

fout.close();

fin.close();

}

catch ( const exception &ex )

{

cout << ex.what() << " ";

}

}

/*

* Point3D.h

*

* Created on: Jan 17, 2018

* Author: kamilla

*/

#ifndef POINT3D_H_

#define POINT3D_H_

#include // include iostream declarations but not definitions

#include "Point2D.h"

template

class Point3D : public Point2D

{

public:

Point3D();

Point3D(T x, T y, T z);

Point3D(const Point3D& point);

virtual ~Point3D() override;

T getZ() const;

void getPoint(T& x1, T& y1, T& z1) const;

void setZ(const T z) ;

void setPoint(const T x1, const T y1, const T z1);

virtual T distanceToOrigin() const override;

template

friend Point3D operator+(const Point3D& p1, const Point3D& p2);

protected:

T z;

virtual T multiply(const Point& p1) const override;

virtual void add (const Point& p1) override;

virtual bool equals (const Point& p1) const override;

virtual bool less (const Point& p1) const override;

virtual void print (std::ostream& os) const override;

virtual void read (std::istream& is) override;

};

#include "Point3D-impl.h"

#endif /* POINT3D_H_ */

/*

* Point3D.cpp

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#include "Point3D.h"

#include

#include

template

Point3D::Point3D() : Point2D(), z(0)

{

// we use constructor call z(0) in the initialization list

// instead of assignment call

// z=0

// because, in general case, assignment is more expensive

// than constructor

}

template

Point3D::Point3D(const T x1, const T y1, const T z1) :

Point2D(x1, y1), z(z1)

{}

template

Point3D::Point3D(const Point3D& other) :

Point2D(other), z(other.z)

{}

// TODO Define Point3D destructor

template

Point3D::~Point3D()

{

// ...

}

// TODO Define Point3D getZ method

template

void Point3D::getZ(const T z1)

{

return z;

}

double Point3D::getZ()

{

return z;

}

// TODO Define Point3D getPoint method

template

void Point3D::getPoint(double& x1,double& y1, double& z1 )

{

Point2D::getPoint(x1 , y1);

z1 = z;

}

template

void Point3D::setZ(const T z1)

{

z=z1;

}

template

void Point3D::setPoint(const T x1, const T y1, const T z1)

{

Point2D::setPoint(x1,y1);

z=z1;

}

template

T Point3D::distanceToOrigin() const

{

const T temp = Point2D::distanceToOrigin();

return sqrt(temp*temp+z*z);

}

template

T Point3D::multiply(const Point& p1) const

{

// TODO Write multiply method body that uses

// Point2D multiply method appropriately

}

template

void Point3D::add (const Point& p1)

{

const Point3D &pp1 = dynamic_cast&>(p1);

Point2D::add(p1);

z += pp1.z;

}

template

bool Point3D::equals (const Point& p1) const

{

// TODO Write equals method body that uses

// Point2D equals method appropriately

}

template

bool Point3D::less (const Point& p1) const

{

const Point3D &pp1 = dynamic_cast&>(p1);

return distanceToOrigin()

}

template

void Point3D::print(std::ostream& os) const

{

Point2D::print(os);

os << ", " << z;

// you can also write

// os << *static_cast*>(this) << ", " << z;

}

template

void Point3D::read (std::istream& is)

{

Point2D::read(is);

std::string s;

is >> s >> z;

if ( s != "," ) throw std::runtime_error( "Expected comma between y and z, got "+s);

}

template

Point3D operator+(const Point3D& p1, const Point3D& p2)

{

Point3D temp(p1);

temp.add(p2);

return temp;

// return Point3D(p1).add(p2);

}

/*

* Point2D-impl.h

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#include

#include

#include "Point2D.h"

template

Point2D::Point2D() : x(0), y(0)

{}

template

Point2D::Point2D(const T x1, const T y1) : x(x1), y(y1)

{}

// TODO Define Point2D copy constructor

template

T Point2D::getX() const

{

return x;

}

// TODO Define Point2D getY method

template

void Point2D::getPoint(T& x1,T& y1) const

{

x1 = x;

y1 = y;

}

template

void Point2D::setX(const T x1)

{

x = x1;

}

// TODO Define Point2D setY method

template

void Point2D::setPoint(const T x1, const T y1)

{

// TODO Write setPoint method body

}

template

T Point2D::distanceToOrigin() const

{

return std::sqrt(x*x+y*y);

}

template

T Point2D::multiply(const Point& p1) const

{

const Point2D &pp1 = dynamic_cast&>(p1);

return (x*pp1.x+y*pp1.y);

}

template

void Point2D::add (const Point& p1)

{

const Point2D &pp1 = dynamic_cast&>(p1);

x += pp1.x;

y += pp1.y;

}

template

bool Point2D::equals (const Point& p1) const

{

// TODO Write equals method body

// Be sure to check that p1 class is Point2D

}

template

bool Point2D::less (const Point& p1) const

{

return distanceToOrigin()

}

template

void Point2D::read (std::istream& is)

{

std::string s;

is >> x >> s >> y;

if ( s != "," ) throw std::runtime_error( "Expected comma between x and y, got "+s);

}

template

void Point2D::print(std::ostream& os) const

{

// TODO write print method body that prints x and y

// separated by ", "

}

template

Point2D::~Point2D()

{}

template

Point2D operator+(const Point2D& p1, const Point2D& p2)

{

Point2D temp(p1);

temp.add(p2);

return temp;

// return Point2D(p1).add(p2);

}

/*

* Point3D.h

*

* Created on: Feb 3, 2018

* Author: kamilla

*/

#ifndef POINT3DWEIGHED_H_

#define POINT3DWEIGHED_H_

// TODO include iostream declarations but not definitions

#include "Point3D.h"

template

class Point3DWeighed : public Point3D

{

public:

// TODO Declare default constructor

// TODO Declare constructor from x, y, z, w

// TODO Declare copy constructor

// TODO Declare destructor

W getWeight () const;

void getPoint (T& x1, T& y1, T& z1, W& weight1) const;

// TODO Declare matching setWeight

// TODO Declare matching setPoint

// virtual T distanceToOrigin() const override; from Point3D

// TODO Declare friend operator+

protected:

W weight;

// TODO Declare protected functions below.

// TODO add

// TODO equals

// TODO less

// TODO print

// TODO read

// TODO Use keywords virtual, const, and override appropriately

};

#include "Point3DWeighed-impl.h"

#endif /* POINT3DWEIGHED_H_ */

/*

* Point3D.cpp

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#include

#include

#include "Point3DWeighed.h"

// TODO Define Point3DWeighed default constructor

template

Point3DWeighed::Point3DWeighed(const T x1, const T y1, const T z1, const W weight1) :

Point3D(x1, y1, z1), weight(weight1)

{}

// TODO Define Point3DWeighed copy constructor

template

Point3DWeighed::~Point3DWeighed()

{}

template

W Point3DWeighed::getWeight() const

{

return weight;

}

template

void Point3DWeighed::getPoint(T& x1, T& y1, T& z1, W& weight1) const

{

Point3D::getPoint(x1,y1,z1);

weight1=weight;

}

// TODO Define Point3DWeighed setWeight method

// TODO Define Point3DWeighed setPoint method

template

void Point3DWeighed::add(const Point& p1)

{

const Point3DWeighed &pp1 = dynamic_cast&>(p1);

Point3D::add(p1);

weight += pp1.weight;

}

template

bool Point3DWeighed::equals (const Point& p1) const

{

// TODO Write equals method body

}

template

bool Point3DWeighed::less (const Point& p1) const

{

const Point3DWeighed &pp1 = dynamic_cast&>(p1);

return Point3D::distanceToOrigin()*weight < pp1.distanceToOrigin()*(pp1.weight);

}

template

void Point3DWeighed::print(std::ostream& os) const

{

// TODO Write print method body that

// prints base Point3D object, then ", ", and weight

}

template

void Point3DWeighed::read (std::istream& is)

{

// TODO Write read method body that

// reads base Point3D object, then ",", and weight

// throw exception if there is no ","

if ( s != "," ) throw std::runtime_error( "Expected comma between z and w, got "+s);

}

template

Point3DWeighed operator+(const Point3DWeighed& p1, const Point3DWeighed& p2)

{

// TODO Write operator+ body

}

/*

* Point-impl.h

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#include

#include

#include "Point.h"

template

T operator*(const Point& p1, const Point& p2)

{

return p1.multiply(p2);

}

template

bool operator==(const Point& p1, const Point& p2)

{

return p1.equals(p2);

}

template

bool operator!=(const Point& p1, const Point& p2)

{

// TODO Write operator!= body that calls equals method

}

// TODO Define operator< that calls less method to compare Points

/* Read Point like this

* ( 1, 2 )

* ( 3, 4, 5 )

* etc.

* Text inside ( ) is read via child's virtual read() method.

* Throw exceptions if ( ) are missing or if istream fails

*/

template

std::istream& operator>>(std::istream& is, Point& point)

{

std::string s;

is >> s;

if ( s != "(" ) throw std::runtime_error( "Expected (, got "+s);

point.read(is);

if ( !is ) throw std::runtime_error( "Invalid input format" );

char c = ' ';

while ( std::isspace(c) ) is >> c;

if ( c != ')' ) throw std::runtime_error( "Expected ), got "+s);

return is;

}

/* Print Point like this

* ( 1, 2 )

* ( 3, 4, 5 )

* etc.

* Text inside ( ) is printed via child's virtual print() method.

*/

template

std::ostream& operator<<(std::ostream& os, const Point& point)

{

os << "( ";

point.print(os);

os << " )";

return os;

}

/*

* Point.h

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#ifndef POINT_H_

#define POINT_H_

#include

template

class Point {

public:

virtual ~Point() {}

// pure virtual functions must be defined in child classes

virtual T distanceToOrigin() const = 0;

protected:

// pure virtual functions must be defined in child classes

virtual T multiply (const Point& p1) const = 0;

virtual void add (const Point& p1) = 0;

virtual bool equals (const Point& p1) const = 0;

virtual bool less (const Point& p1) const = 0;

virtual void print (std::ostream& os) const = 0;

virtual void read (std::istream& is) = 0;

// treat friend functions declarations like they are written

// outside the class

template

friend U operator*(const Point& p1, const Point& p2);

template

friend bool operator==(const Point& p1, const Point& p2);

// TODO Declare friend operator!= and operator<

template

friend std::ostream& operator<<(std::ostream& os, const Point& point);

template

friend std::istream& operator>>(std::istream& is, Point& point);

};

#include "Point-impl.h"

#endif /* POINT_H_ */

/*

* Point2D.h

*

* Created on: Jan 28, 2018

* Author: kamilla

*/

#ifndef POINT2D_H_

#define POINT2D_H_

#include // include iostream declarations but not definitions

#include "Point.h"

template

class Point2D : public Point {

public:

Point2D();

Point2D(const T x, const T y);

Point2D(const Point2D& point);

virtual ~Point2D() override;

T getX() const;

T getY() const;

void getPoint(T& x1, T& y1) const;

void setX(const T x);

void setY(const T y);

void setPoint(const T x1, const T y1);

// use override so compiler checks that the function is

// initially defined in the base class

virtual T distanceToOrigin() const override;

template

friend Point2D operator+(const Point2D& p1, const Point2D& p2);

protected:

T x;

T y;

// use override so compiler checks that the function is

// initially defined in the base class

virtual T multiply(const Point& p1) const override;

virtual void add (const Point& p1) override;

virtual bool equals (const Point& p1) const override;

virtual bool less (const Point& p1) const override;

virtual void print (std::ostream& os) const override;

virtual void read (std::istream& is) override;

};

#include "Point2D-impl.h"

#endif /* POINT2D_H_ */

/*

* vectorOfPoints.cpp

*

* Created on: Feb 3, 2018

* Author: kamilla

*/

#include

#include

#include

#include "VectorUtilities.h"

template

void fillVector(

std::istream &is,

std::vector &a

)

{

std::string s;

is >> s;

if ( s != "[" ) throw std::runtime_error( "Expected [, got "+s);

a.clear();

while (is)

{

char c = ' ';

while ( std::isspace(c) ) is >> c;

if ( c == ']' ) break;

is.putback(c);

P *temp = new P;

is>>*temp;

a.push_back(temp);

}

if ( !is ) throw std::runtime_error( "Invalid vector input format" );

}

template

void outputVector(

std::ostream &os,

const std::vector &a,

const std::string &info

)

{

os<

for (unsigned int i=0;i

{

os<<" "<<*a[i]<<" ";

}

os<<"] ";

}

template

void findPointMinDistanceToOrigin(

const std::vector &a,

T &minDistance,

P &p1

)

{

bool start = true;

P *closestP = nullptr;

minDistance = T(); // zero initialization

for ( const auto p : a )

{

const auto distance = p->distanceToOrigin();

if ( start || distance

{

minDistance = distance;

closestP = p;

start = false;

}

}

// closest P or default constructed P

p1 = closestP ? *closestP : P();

}

template

void fill2VectorsOp(

std::istream &is,

std::vector &a,

std::string &op

)

{

std::string s;

is >> s;

if ( s != "[" ) throw std::runtime_error( "Expected [, got "+s);

a.clear();

// char c = ' ';

// while ( std::isspace(c) ) is >> c;

P *temp1 = new P;

is>>*temp1;

a.push_back(temp1);

if ( !is ) throw std::runtime_error( "Invalid P input format" );

is>>op;

P *temp2 = new P;

is>>*temp2;

if ( !is ) throw std::runtime_error( "Invalid P input format" );

a.push_back(temp2);

is >> s;

if ( s != "]" ) throw std::runtime_error( "Expected ], got "+s);

if ( !is ) throw std::runtime_error( "Invalid vector input format" );

}

/*

* VectorUtilities.h

*

* Created on: Feb 3, 2018

*/

#ifndef VECTORUTILITIES_H_

#define VECTORUTILITIES_H_

#include

#include

#include

#include "Point.h"

template

void fillVector(

std::istream &is,

std::vector*> &a

);

template

void outputVector(

std::ostream &os,

const std::vector*> &a,

const std::string &info

);

template

void findPointMinDistanceToOrigin(

const std::vector*> &a,

T &distance,

Point &p1

);

template

void fill2VectorsOp(

std::istream &is,

std::vector*> &a,

std::string &op

);

#include "VectorUtilities-impl.h"

#endif /* VECTORUTILITIES_H_ */

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!