30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

9.4 Weitere wichtige technische Aspekte 233<br />

E<strong>in</strong>e solche Vorschrift nennt man e<strong>in</strong>e abstrakte Methode. Von ihr ist<br />

<strong>in</strong> der Basis nur die Signatur (=das Interface) bekannt, aber es gibt dort<br />

noch ke<strong>in</strong>e Implementation davon. Klassen, die solche abstrakten Methoden<br />

enthalten, nennt man abstrakte Klassen. Im Extremfall kann es sogar se<strong>in</strong>,<br />

dass e<strong>in</strong>e Klasse ausschließlich abstrakte Methoden enthält. Dann spricht<br />

man von re<strong>in</strong> abstrakten Klassen bzw. auch <strong>in</strong> Anlehnung an Java von re<strong>in</strong>en<br />

Interfaces.<br />

Die Realisierung unseres Wunsches nach e<strong>in</strong>em solchen Konstrukt ist e<strong>in</strong>fach,<br />

wie man an folgendem Beispiel sieht (abstract_displayable.h):<br />

1 // a b s t r a c t d i s p l a y a b l e . h − abstract d i s p l a y a b l e base c l a s s<br />

2<br />

3 #ifndef a b s t r a c t d i s p l a y a b l e h<br />

4 #def<strong>in</strong>e a b s t r a c t d i s p l a y a b l e h<br />

5<br />

6 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

7 /∗<br />

8 ∗ Displayable<br />

9 ∗<br />

10 ∗ a bstract base c l a s s f o r d i s p l a y a b l e o b j e c t s<br />

11 ∗<br />

12 ∗/<br />

13<br />

14 class Displayable<br />

15 {<br />

16 public :<br />

17 virtual ˜ Displayable ( ) { }<br />

18<br />

19 virtual const char ∗ getDisplayRep ( ) const = 0;<br />

20 } ;<br />

21<br />

22<br />

23 #endif // a b s t r a c t d i s p l a y a b l e h<br />

In dieser Klassendeklaration s<strong>in</strong>d zwei kle<strong>in</strong>e Neuigkeiten versteckt:<br />

• Zeile 19 zeigt, wie man e<strong>in</strong>e abstrakte Methode deklariert: Man schreibt<br />

e<strong>in</strong>fach = 0 h<strong>in</strong>ter die Signatur. Wieso das so geschrieben wird, möchte ich<br />

hier e<strong>in</strong>fach e<strong>in</strong>mal salopp erklären: E<strong>in</strong>e Methode ist natürlich, wie auch<br />

e<strong>in</strong>e Funktion, nach der Übersetzung durch den Compiler und Auflösung<br />

durch den L<strong>in</strong>ker e<strong>in</strong>fach e<strong>in</strong> Po<strong>in</strong>ter, der die E<strong>in</strong>sprungadresse repräsentiert.<br />

Durch die Schreibweise = 0 teilt man dem Compiler e<strong>in</strong>fach mit, dass<br />

diese Methode auf Adresse 0 zu liegen kommt, was bedeutet, dass sie nicht<br />

aufgerufen werden kann. Damit kann man sich natürlich auch die Implementation<br />

dazu sparen. Ich möchte noch dazu sagen, dass diese saloppe<br />

Erklärung nicht zu 100% den Tatsachen entspricht, da noch andere D<strong>in</strong>ge<br />

hier mit <strong>in</strong>s Spiel kommen, aber als Gedankenmodell ist sie <strong>in</strong> Ordnung.<br />

• In Zeile 17 sieht man, dass es nicht nur <strong>in</strong>l<strong>in</strong>e Funktionen, sondern logischerweise<br />

auch <strong>in</strong>l<strong>in</strong>e Methoden gibt. Bei diesen kann das Keyword<br />

<strong>in</strong>l<strong>in</strong>e, wie hier geschehen, auch weggelassen werden, denn das Vorkommen<br />

e<strong>in</strong>er Implementation (hier e<strong>in</strong>er leeren Implementation) <strong>in</strong>nerhalb e<strong>in</strong>er<br />

Klassendeklaration ist automatisch schon e<strong>in</strong> Kennzeichen für <strong>in</strong>l<strong>in</strong>e.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!