Abstrakte Methoden und Vererbung
-
Hallo zusammen,
ich habe eine Frage zu abstrakten Methoden und zwar hab ich momentan folgendes.
class VE{ const string Absender; //... public: const string getAbsender(); //.... virtual void versenden()=0 //Abstrakte Metode } class Brief: public VE{ virtual void versenden () {cout << getAbsender() << "nach" << getEmpfänger();} }Meine Klasse Brief erbt ja nun alles aus VB, kann ich nun ohne irgendwelches referenzieren bzw. Scope-Operator in Brief auf ide Methoden zugreifen?
Dann wollte ich noch versuchn die versenden() direkt in der Klasse zu implementieren (ich weiß das macht man nicht, aber ich wollte es dennoch mal versuchen). Geht das ohne das ich versenden deklariere?
Habe es schon laufen lassen aber irgndwie stürzt es ohne Fehlermeldung ab. Ich will keine Lösung, sondern nur wissen ob der momentane weg überhaupt so geht, dass ich von der denke dahintersteige.
Grüße und danke
-
Abstrakt schrieb:
Ich will keine Lösung, sondern nur wissen ob der momentane weg überhaupt so geht, [...]
Ja, das geht. Sogar so wie es dasteht, wenn man die offensichtlichen Syntaxfehler beseitigt und die beiden Memberfunktionen in
VEdefiniert.
-
Abstrakt schrieb:
Hallo zusammen,
ich habe eine Frage zu abstrakten Methoden und zwar hab ich momentan folgendes.
Du hast keine abstrakte Methode du hast eine pure virtual Methode definiert.
Abstrakt schrieb:
Meine Klasse Brief erbt ja nun alles aus VB, kann ich nun ohne irgendwelches referenzieren bzw. Scope-Operator in Brief auf ide Methoden zugreifen?
Ich bin mir nicht sicher was Du damit meinst.
Wenn die Klasse Brief von deiner Basisklasse VE erbt, dann kann sie auch auf die Methoden von der Basisklasse zugreifen.
Wenn du an den Methoden etwas ändern willst musst du sie überschreiben.Abstrakt schrieb:
Dann wollte ich noch versuchn die versenden() direkt in der Klasse zu implementieren (ich weiß das macht man nicht, aber ich wollte es dennoch mal versuchen). Geht das ohne das ich versenden deklariere?
Ich versteh nicht ganz. Willst du die virtuelle Methode versenden ueberschreiben oder willst du eine eigenständige "lokale" Funktion von versenden?
Das würde nur gehen, wenn die Funktionssignatur eine andere ist.
(Andere Parameter)Abstrakt schrieb:
Habe es schon laufen lassen aber irgndwie stürzt es ohne Fehlermeldung ab. Ich will keine Lösung, sondern nur wissen ob der momentane weg überhaupt so geht, dass ich von der denke dahintersteige.
Ohne, dass du uns erklärst was du genau bezweckst und machen willst, können wir dir schlecht Ratschläge geben.
Was z.B. ist VE?
-
Ruvi schrieb:
Abstrakt schrieb:
ich habe eine Frage zu abstrakten Methoden und zwar hab ich momentan folgendes.
Du hast keine abstrakte Methode du hast eine pure virtual Methode definiert.
pure virtual == abstrakt. du betreibst i-tüpferl-reiterei.
-
Abstrakt schrieb:
Dann wollte ich noch versuchn die versenden() direkt in der Klasse zu implementieren (ich weiß das macht man nicht, aber ich wollte es dennoch mal versuchen). Geht das ohne das ich versenden deklariere?Ich vermute(!), der TE will die Methode Inline im Header definieren. Was soll er sonst meinen mit "direkt in der Klasse" ...
-
Swordfish schrieb:
Ruvi schrieb:
Abstrakt schrieb:
ich habe eine Frage zu abstrakten Methoden und zwar hab ich momentan folgendes.
Du hast keine abstrakte Methode du hast eine pure virtual Methode definiert.
pure virtual == abstrakt. du betreibst i-tüpferl-reiterei.
Nein, das stimmt nicht.
In C++ gibt es keine Abstrakten Methoden.Ich habe Abstrakte Methoden nur schon mal in Java gehoert.
Dort sind sie mit:
"Abstrakte Methoden sind zwar deklariert, aber noch nicht implementiert (sie besitzen keinen Methodenkörper und damit auch keine Anweisungen)."In C++ koennen pure virtual Methoden auch einen Funktionsbody haben. Deswegen finde ich die Unterscheidung schon wichtig.
-
Was für Methoden? In C++ heißen die Memberfunktionen.
-
Ruvi schrieb:
...Deswegen finde ich die Unterscheidung schon wichtig.
Ja, wahnsinnig relevant.
