#include #include using namespace std; class Futter { public: Futter () {cout << "Futter" << endl;} virtual string name () = 0; }; class Tier { public: Tier () {cout << "Tier" << endl;} virtual Futter * create () {cout << "Can't do that!" << endl;} virtual void friss (Futter * t) = 0; }; class Gras : public Futter { public: Gras () {name();} virtual string name () {return "Gras";} }; class Kuh : public Tier { public: Kuh () {cout << "Kuh" << endl;} virtual Futter * create () {return new Gras;} virtual void friss (Futter * t) {cout << "mmh, gut " << t->name() << endl;} }; class Fleisch : public Futter { public: Fleisch() {cout << name() << endl;} virtual string name () {return "Fleisch";} }; class Tiger: public Tier { public: Tiger () {cout << "Tiger" << endl;} virtual Futter * create () {return new Fleisch;} virtual void friss (Futter * t) {cout << "mmh, gut " << t->name() << endl;} }; class Banane : public Futter { public: Banane() {cout << name() << endl;} virtual string name () {return "Banane";} }; class Affe: public Tier { public: Affe () {cout << "Affe" << endl;} virtual Futter * create () {return new Banane;} virtual void friss (Futter * t) { if (typeid(t) == typeid(Banane)) {cout << "mmh, gut " << t->name() << endl;} else {cout << "will das nicht" << endl;} } }; template class Zoo : public Tier { Tier * p; public: Zoo() : p(0) {} virtual Tier* instantiate() {if (p==0) p = new Tier(); return p;} virtual void friss (Futter * t) {cout << "Kein futter für mich" << endl;} }; int main() { Tier * k = new Kuh; k->friss (k->create()); Tier * t = new Tiger; t->friss (t->create()); Zoo * z = new Zoo ; Tier * a = z->instantiate(); a->friss(a->create()); a->friss(t->create()); }
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif