Streichelzoo |
14.01.2015, 23:19 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | Streichelzoo Haufig wird Vererbung dazu eingesetzt, eine “ist ein”-Beziehung zwischen verschiedenen Klassen ¨ darzustellen. Funktionen, die mit vielen verschiedenen Klassen funktionieren sollen, werden fur eine ¨ abstrakte Basisklasse (Schnittstelle) definiert und anschließend mit Objekten benutzt, deren Klassen von dieser Basisklasse abgeleitet wurden. Ziel dieser Aufgabe ist die Darstellung der Vorteile dieser Trennung in Schnittstelle und Implementierung an einem konkreten Beispiel. Stellen Sie sich einen Zoo vor, in dem es eine Vielzahl verschiedener Tiere gibt. Fur jedes Tier soll vereinfachend gelten, dass es sich um ein S ¨ augetier, einen ¨ Vogel oder einen Fisch handelt. Desweiteren • ist es den Besuchern moglich, einen Teil der Tiere zu f ¨ uttern (z.B. Ziegen, G ¨ anse, Goldfische), ¨ andere nicht (Pinguine, Baren, Haie). ¨ • ist es den Besuchern moglich, einen Teil der S ¨ augetiere zu streicheln (Ziegen), andere nicht ¨ (Baren). V ¨ ogel und Fische k ¨ onnen nicht gestreichelt werden. ¨ • machen Saugetiere und V ¨ ogel charakteristische Ger ¨ ausche. Wir nehmen an, dass Fische stets ¨ stumm sind. • haben alle Tiere (ja, auch die Goldfische!) einen Spitznamen, der ihnen im Konstruktor uberge- ¨ ben wird. Implementieren Sie eine Klassenhierarchie, so dass es moglich ist, die Funktionen ¨ • void fuettern ( Tier& tier ) • void streicheln ( Saeugetier& saeugetier ) • void geraeusch ( Saeugetier& saeugetier ) • void geraeusch ( Vogel& vogel )zu nutzen. Legen Sie außerdem mindestens zehn verschiedene Tierarten an, davon mindestens zwei aus jeder der drei Kategorien. Ein Aufruf der oben genannten Funktionen soll das Tier fragen, ob die gewunschte Operation m ¨ oglich ist, und dann Ausgaben z.B. der folgenden Form erzeugen: ¨ Die Ziege Billy l¨asst sich f¨uttern. Der B¨ar Bruno m¨ochte nicht gestreichelt werden! Die Gans Herta schnattert. Da die Eigenschaften der Tiere fur eine ganze Art gelten und somit von der Instanz unabh ¨ angig ¨ sind (alle Ziegen lassen sich futtern, nicht nur Billy), k ¨ onnen Sie sie mit dem Schl ¨ usselwort “ ¨ static” als Klassenvariable deklarieren: static const bool fuetterbar = <Wert>; Dadurch wird die Variable nicht fur jede Instanz erneut angelegt, außerdem wird deutlich, dass ¨ es sich um eine Eigenschaft handelt, die alle Tiere dieser Art teilen. Benutzen Sie fur diese Aufgabe abstrakte Basisklassen und rein virtuelle Methoden. Sorgen Sie ¨ dafur, dass die einzelnen Tierarten genau jene Variablen und Methoden erhalten, die sie zum Funk- ¨ tionieren benotigen, z.B. sollte es kein ¨ bool streichelbar fur Fische geben. Geben Sie zus ¨ atzlich ¨ zu Ihrem Programm ein Diagramm ab, in dem Sie die durch die Vererbung gegebene Baumstruktur darstellen. ^^ das ist die aufgabe die ich erledigen soll dazu habe ich bisher folgendes: als eine streichelzoo.h habe ich:
und als streichelzoo.cpp
wie gehe ich jetz vor um dort mit void etc die tiere jeweils korrekt ausgeben zu lassen das sie eben beispielsweise gefüttert werden wollen aber nicht gestreichelt und dann auch noch die art des geräuschs das sie immer von sich geben - und dabei noch an die aufgabevorgaben da halten |
||||||||||
|
|||||||||||
15.01.2015, 13:05 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | Ehrliche Antwort: das ist ziemlich viel, ich habe keine Lust, das komplett durchzugehen. Der Sinn der Trennung in .h und .cpp ist, im Header nur zu sagen, welche Methoden es gibt. Die Implementierung erfolgt komplett in der zugehörigen .cpp. Das Testen der Funktionen kommt in eine weitere Datei, nennen wir sie main.cpp. #endif macht nur dann Sinn, wenn das if auch irgendwo losgeht, z.B. durch #ifndef |
||||||||||
15.01.2015, 14:47 | Auf diesen Beitrag antworten » | ||||||||||
kleinerstrolch | das endif habe ich nun weggelassen soweit schon danke |
|