const Methoden ?
-
ich habe eine Methode in klasse B, die bekommt ein objekt der klasse A als const Referenz übergeben, wie kann ich in klasse A eine methode erstellen, die ich aus der besagten Merhode aus Klasse B aufrufan kann.
Ich hab es bisher versucht mit const vor die Methode von A zu schreiben, aber das hilft nicht.
Das const wegzustreichen würde zwar mein problem beheben, aber ich würde gerne sauber bleiben.
-
das const musst hinter die funktion.
class A{ void constfunction() const; //<- da };dann klapp es auch mit den konstanten referenzen. man sollte nebenbei bei allen funktionen, die die klasse nicht ändern, diese als const markieren.
-
danke

und bei abstrakten methoden?
class A{ virtual void test() const = 0; }so hab ich es jetzt gemacht kompiliert tadellos, bin mir nur nocht sicher, dass es auch wirklich richtig ist, weil es doch komisch aussieht.
-

wohl, das stimmt schon so.class foo { virtual int bar() const volatile throw() = 0; };
-
und was heist das schon wieder? volatile war doch für datentypen, die in anderen threads manippuliert werden können gut oder nicht?
-
volatile heißt ganz allgemein, dass sich der datentyp nicht deterministisch verhält. es also sein kann, dass zwei gleiche zugriffe unterschiedliche ergebnisse liefern. nutzbar ist das bei objekten, die mehrere threads genutzt werden, ober auch für gemeinsame objekt zwischen verschiedenen prozessen usw.
wenn du eine funktion als volatile setzt, kannst du sie analog zu const funktionen, in objekten nutzen, die volatile sind.
also:
class foo{ virtual int bar() volatile; virtual int bar2(); }; volatile foo test; test.bar(); //geht test.bar2(); //geht nicht, auch wenn die fehlermeldung des gcc dazu echt cool ist
-
ghorst schrieb:
test.bar2(); //geht nicht, auch wenn die fehlermeldung des gcc dazu echt cool istDie Übergabe von »volatile foo« als »this«-Argument von »virtual int foo::bar2()« streicht QualifiziererWiso, ist doch ne normale verständliche fehlermeldung, so ähnlich war sie bei mir auch, als ich das const falsch plaziert hatte.