// Constructors and Destructors in Derived Classes (P.559)
#include <iostream>
#include <string>
using std::cout;
using std::string;

class String {
public:
    String(string s): txt(s) { cout << "String " << txt << " constructor.\n"; }
    ~String() { cout << "String " << txt << " destructor.\n"; }

    string txt;
};

class Human {
public:
    Human(string s): name(s) { cout << "Human " << name.txt << " constructor.\n"; }
    ~Human() { cout << "Human " << name.txt << " destructor.\n"; }
private: 
    String name;
};

class Employee : public Human {
public:
    Employee(string n, string d): Human(n), department(d) { cout << "Employee constructor.\n"; }
    ~Employee() { cout << "Employee destructor.\n"; }
private:
    String department;
};

int main()
{
    Human( "Alice" );
    cout << "======\n";
    Employee( "Emmy", "CSIE" );
    return 0;
}
