// foo.h   Experiments with constructors and destructors
//        When are they called?   P. Conrad for CISC220 06J

#ifndef FOO_H
#define FOO_H

#include <iostream>
using std::ostream;

class Foo_C
{
 public: 
  Foo_C(const char * const theLabel); // (7) ordinary constructor
  Foo_C(); // (8) default constructor
  
  
  // big-3
  Foo_C(const Foo_C & orig); // (9)
  Foo_C & operator = (const Foo_C & right); // (10)
  ~Foo_C(); // (11)

  void print(ostream & out) const { out << label; }

 private:
  char *label;

};

ostream & operator << (ostream & left, const Foo_C & right); // (12)

#endif

