Interfaces?
lima-city → Forum → Programmiersprachen → C/C++ und D
ableitung
abstrakter klassen
code
compiler
detail
erzeugen
glauben
hilfe
implementation
instanz
interface
kniff
methode
realisieren
referenz
spezialisierung
verwenden
virtuelle funktion
virtuelle variablen funktionen
zugreifen
-
Ich möchte gerne mit hilfe abstrakter klassen ein Interface realisieren. Muss ich da nun jede Klasse von dem Interface ableiten? Wenn ich aufs Iface zugreifen will, muss ich ne Referenz verwenden? oder einfach normal? :)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hoster90 schrieb:
Ich möchte gerne mit hilfe abstrakter klassen ein Interface realisieren. Muss ich da nun jede Klasse von dem Interface ableiten?
Ja.
Deine abstrakte Klasse definierst du folgendermaßen:
class abstrakteKlasse
{
public:
virtual int funktion1();
virtual int funktion2();
}
Und die Ableitung ist dann
class konkreteKlasse : abstrakteKlasse
{
public:
int funktion1(){/*ueberschreibe funktion1*/}
int funktion2(){/*ueberschreibe funktion2*/}
}
Wenn ich aufs Iface zugreifen will, muss ich ne Referenz verwenden? oder einfach normal? :)
Normal.
Ich habe es jetzt nicht getestet und ich bin mir nicht sicher, ob virtuelle Variablen/Funktionen immer überschrieben werden müssen.
Jedenfalls definierst du eine abstrakte Klasse, indem du die Member virtual machst.
Beitrag geändert: 10.7.2008 21:30:19 von bladehunter -
Ergänzung: Bin mir jetzt nicht sicher ob eine virtuelle Funktion allein schon reicht, damit die Klasse auch für den Cpompiler wirklich abstrakt wird (d.h., man kann keine Instanz davon erzeugen). Evtl. müssen alle Methoden virtual sein oder so, es gab da irgendeinen Kniff bei der Sache ^^
Definitiv abstrakt machst du sie, indem du die Methoden auf Null setzt (eigentlich sollte eine, z.B. Konstruktor, ausreichen):
class abstrakteKlasse
{
public:
virtual int funktion1()=0;
virtual int funktion2()=0;
}
Dann musst du jede Methode in der Spezialisierung implementieren, sonst gibt\'s böse Zugriffsfehler (bzw. der Compiler meckert) ;)
MfG,
thw -
abstrakt gibts es nicht (wirklich) in c++...aber stören wir uns nicht an details...
damit eine klasse wirklich \"abstrakt\", d.h. nicht instanzierbar ist, muss mindestens eine methode als pure virtual deklariert werden. Wird die methode nur als virtual deklariert, muss eine default implementation gemacht werden. Pure virtual methoden müssen dann zwingend in den abgeleiteten klassen implementiert werden.
-
es reicht auch wenn man nur eine Methode 0 setzt, glaube ich oder?
-
es reicht auch wenn man nur eine Methode 0 setzt, glaube ich oder?
Stimmt, eine Klasse wird abstrakt, wenn zumindest eine der Methoden =0 gesetzt wird.
class Klasse { virtual foo()=0; }
Was "virtual" angeht:
http://de.wikipedia.org/wiki/Virtuelle_Methode
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage