//: C10:KissingPrincss2.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Vzor Stav
#include <iostream>
#include <string>
using namespace std;

class Bytost {
  class Stav {
  public:
    virtual string odpoved() = 0;
  };
  class Zaba : public Stav {
  public:
    string odpoved() { return "Kváák!"; }
  };
  class Princ : public Stav {
  public:
    string odpoved() { return "Miláčku!"; }
  };
  Stav* stav;
public:
  Bytost() : stav(new Zaba()) {}
  void pozdrav() {
    cout << stav->odpoved() << endl;
  }
  void polibek() {
    delete stav;
    stav = new Princ();
  }
};

int main() {
  Bytost bytost;
  bytost.pozdrav();
  bytost.polibek();
  bytost.pozdrav();
} ///:~
