C++ Class Inheritance Defining and using a derived class

Description

C++ Class Inheritance Defining and using a derived class

#include <iostream>
#include <string>                                // For the string class
#include <iostream>
#include <iomanip>

class Pool//  w ww  .j  a  v a  2  s.c  o m
{
private:
  double length {1.0};
  double width {1.0};
  double height {1.0};

public:
  // Constructors
  Pool(double lv, double wv, double hv) : length {lv}, width {wv}, height {hv} {}
  Pool() = default;                          // No-arg constructor

  double volume() const                     // Function to calculate the volume
  {
    return length*width*height;
  }

  // Accessors
  double getLength() const { return length; }
  double getWidth() const { return width; }
  double getHeight() const { return height; }

  friend std::ostream& operator<<(std::ostream& stream, const Pool& pool);
};

// Stream output for Pool objects
inline std::ostream& operator<<(std::ostream& stream, const Pool& pool)
{
  stream << " Pool(" << std::setw(2) << pool.length << ","
    << std::setw(2) << pool.width << ","
    << std::setw(2) << pool.height << ")";
  return stream;
}


using std::string;

class Carton : public Pool
{
private:
  string material;

public:
  Carton(const string desc = "Cardboard") : material {desc}{}     // Constructor
  //  double carton_volume() { return length*width*height; }        // Uncomment for an error!
};

int main()
{
  // Create a Pool object and two Carton objects
  Pool pool {40.0, 30.0, 20.0};
  Carton carton;
  Carton candyCarton {"Thin cardboard"};

  // Check them out - sizes first of all
  std::cout << "pool occupies " << sizeof pool << " bytes" << std::endl;
  std::cout << "carton occupies " << sizeof carton << " bytes" << std::endl;
  std::cout << "candyCarton occupies " << sizeof candyCarton << " bytes" << std::endl;

  // Now volumes...
  std::cout << "pool volume is " << pool.volume() << std::endl;
  std::cout << "carton volume is " << carton.volume() << std::endl;
  std::cout << "candyCarton volume is " << candyCarton.volume() << std::endl;

  std::cout << "candyCarton length is " << candyCarton.getLength() << std::endl;

  // Uncomment any of the following for an error...
  // pool.length = 10.0;
  // candyCarton.length = 10.0;
}



PreviousNext

Related