abstrakte klassen und dynamische bindung
-
Hallo,
für was sind abstrakte klassen gut, könnt ich so eine auch in meinem programm gebrauchen???
Abstrakte Klassen kann man nicht direkt instanziieren. In deinem Programm wäre z. B. eine abstrakte Klasse "Konto" denkbar. Ein Konto könnte also nicht erstellt werden, sondern nur Girokonten oder Pensionskonten, die aber von der Klasse Konto erben.
Das hat den Vorteil, dass allen Konten bestimmte Eigenschaften "aufgezwungen" werden, aber noch zusätzliche implementieren können.
Virtuelle Methoden deklariert man normalerweise in Basisklassen. Das macht man, wenn die Schnittstellen gleich sein sollen, aber die Implementierung in den einzelnen Subklassen anders sein kann. Wenn man die Klassen pure virtuel macht, dann müssen die Subklassen diese implementieren. Das würde dann bedeuten, dass es kein Standardverhalten gibt (also so, wie es bei einer Klasse "Konto" denkbar wäre).
-
danke erstmal,
aber kannst du mir auch helfen wie man die abstrakten klassen da rein setzt?? bei der dynamischen bindung weiß ich es auch nicht genau wie man das macht.
vielen dank daniel
-
danke erstmal,
aber kannst du mir auch helfen wie man die abstrakten klassen da rein setzt?? bei der dynamischen bindung weiß ich es auch nicht genau wie man das macht.
vielen dank daniel
-
CarstenJ schrieb:
[...]Wenn man die Klassen pure virtuel macht, dann müssen die Subklassen diese implementieren.[...]
Nö müssen sie nicht. Wenn du sie nicht implementierst, dann bleiben sie eben abstrakt, oder?
-
wie würde dann meien abstrakte klasse aussehen?
konto = 0;
hab ich mal wo gesehn....
kannst du mir mal zeign wo ich virtual bei meinem prog rein tu??
cu
-
Hallo,
so ähnlich. Du musst mind. eine Methode der Klasse pure virtual machen:
virtual void print() = 0; // = 0 macht die Klasse abstrakt....
Damit lässt sich kein Objekt mehr direkt erzeugen.
@Jover:
Ja, du hast Recht.
-
CarstenJ schrieb:
Hallo,
so ähnlich. Du musst mind. eine Methode der Klasse pure virtual machen:
virtual void print() = 0; // = 0 macht die Klasse abstrakt....
Damit lässt sich kein Objekt mehr direkt erzeugen.
@Jover:
Ja, du hast Recht.hi CarstenJ!
was muss ich an meiner klasse konto no verändern damit sie abstrakt wird?
is dein mein konto nur mehr so ne art schnittstelle? versteh den sinn dafür aber net...
cu
-
Hallo,
wie schon geschrieben, du musst mindestens eine Klasse pure virtual machen, dann ist die Klasse abstrakt. Ich hab dir Methode "print" gewählt. Der Sinn liegt darin:
Alle Klassen, die von Konto erben, haben die vorgegebeben Schnittstellen. Du steuerst praktisch mit der Klasse Konto alle anderen Klassen, die von ihr erben. Bevor du sowas machst, musst du dir natürlich über deine eigene Abstraktionsebene im Klaren sein. Wenn dein Programm nicht zwischen Giro-, Pensions- und Festgeldkonto unterscheiden soll, dann reicht die Klasse Konto, die auch direkt erzeugt werden kann. Du möchtest aber unterscheiden: Ein Girokonto ist ein Konto, ein Festgeldkonto ist auch ein Konto.
Nun musst du dir darüber Gedanken machen, was ein Konto alles können muss: Man muss Geld einzahlen und abheben können. Zinsen werden ausgeschüttet, und da unterscheiden sich die einzelnen Konten aber schon in der Höhe. D. h., du musst die Zinsen für die unterschiedlichen Kontenarten anders berechnen, aber die Tatsache, dass Zinsen gezahlt werden, ist auf jeden Fall vorhanden.
Bin jetzt etwas müde, deswegen war das wahrscheinlich nicht so extrem verständlich :). Du solltest auf jeden Fall nochmal bei Shades Tutorial vorbeigucken: http://tutorial.schornboeck.net/oop.htm
-
naja so verständlich is das nit!!
kannst du mal eine beispiel zeigen??cu
-
Hoi,
dafür gibt es wirklich genug Tutorials im Netz. Einfach mal Google bemühen.