Hi,
I am going to be attending university next year on a coding course, I am currently working through an exercise in the Deitel book How To Program and I have encountered some errors in my program. Any help would be much appreciated.
Bob
Here is my code
cube.h
#include "cube.h"
#include <iostream>
using std::cout;
//Write the constructor for Cube class
Cube::Cube(double s, double x, double y)
: ThreeDimensionalShape( x, y) { sideLength = s > 0 ? s : 0; }
double Cube::area() const { return 6 * sideLength * sideLength; }
double Cube::volume() const
{ return sideLength * sideLength * sideLength; }
double Cube::getSideLength() const { return sideLength; }
void Cube::print() const
{
cout << "Cube with side length " << sideLength << "; center at ("
<< xCenter << ", " << yCenter << ");\narea of "
<< area() << "; volume of " << volume() << '\n';
}
shape.h
#ifndef SHAPE_H
#define SHAPE_H
#include <iostream>
using namespace std;
class Shape {
friend ostream & operator<<( ostream &, Shape & );
public:
Shape( double = 0, double = 0 );
double getCenterX() const;
double getCenterY() const;
//Write virtual pure print function
virtual void print() const = 0;
protected:
double xCenter;
double yCenter;
};
#endif
square.h
#ifndef SQUARE_H
#define SQUARE_H
#include "twodim.h"
// write statement for square public inheritance from 2-dimensional class
class Square : public TwoDimensionalShape {
public:
Square( double = 0, double = 0, double = 0 );
double getSideLength() const;
double area() const;
void print() const;
private:
double sideLength;
};
#endif
threedim.h
#ifndef THREEDIM_H
#define THREEDIM_H
#include "shape.h"
class ThreeDimensionalShape : public Shape {
public:
// Write the constructor for 3-dimensional shape
ThreeDimensionalShape( double = 0, double = 0);
// declare a pure virtual member function area
virtual double area() const = 0;
// declare a pure virtual member function volume
virtual double volume() const = 0;
};
#endif
twodim.h
#ifndef TWODIM_H
#define TWODIM_H
#include "shape.h"
class TwoDimensionalShape : public Shape {
public:
// Write the constructor for 2-dimensional shape and declare
// pure virtual member functions area
TwoDimensionalShape( double = 0.0, double = 0.0 );
// declare pure virtual member functions area
virtual double area() const = 0;
};
#endif
main.cpp
#include <iostream>
using namespace std;
#include "square.h"
#include "cube.h"
int main()
{
Square sqr( 12, 2, 2 );
Cube cub( 2.2 );
Shape *ptr[ 2 ] = { &sqr, &cub };
for ( int x = 0; x < 2; ++x )
cout << *( ptr[ x ] ) << '\n';
return 0;
}
cube.cpp
#include <iostream>
using namespace std;
#include "square.h"
#include "cube.h"
int main()
{
Square sqr( 12, 2, 2 );
Cube cub( 2.2 );
Shape *ptr[ 2 ] = { &sqr, &cub };
for ( int x = 0; x < 2; ++x )
cout << *( ptr[ x ] ) << '\n';
return 0;
}
shape.cpp
#include "shape.h"
Shape::Shape( double x, double y )
{
xCenter = x;
yCenter = y;
}
double Shape::getCenterX() const { return xCenter; }
double Shape::getCenterY() const { return yCenter; }
ostream & operator<<( ostream &out, Shape &s )
{
s.print();
return out;
}
square.cpp
#include "square.h"
#include <iostream>
using std::cout;
Square::Square( double s, double x, double y )
: TwoDimensionalShape( x, y ) { sideLength = s > 0 ? s : 0; }
double Square::getSideLength() const { return sideLength; }
double Square::area() const {
// write the code for calculating the area of a square
return sideLength * sideLength;
}
void Square::print() const
{
cout << "Square with side length " << sideLength << "; center at ("
<< xCenter << ", " << yCenter << ");\narea of " << area() << '\n';
}