Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : konstante funktionen



luh
20-06-2005, 13:23
hi leuts
ich habe gerade in meinem c++ ueber konstante funktionen gelesen. als beispiel geben sie eine konstante funktion, die "Warnung..." ausdruckt. (via cout). Allerdings scheint mir das nicht besonders sinnvoll.
Ist das sinnvoll, wenn ja wieso, ansonsten, wozu sind konstante funktionen gut?
luh

Boron
20-06-2005, 13:52
Ich weiß jetzt nicht genau was du meinst, aber ich zitiere mal (gekürzt) aus dem Stroustrup:
class Datum {
int tag, monat, jahr;
public:
int tag() const { return tag; }
int monat() const { return monat; }
int jahr() const { return jahr++; } // Fehler
};const hinter der leeren Argumentliste bedeutet, dass die Funktionen das Datum nicht ändern können. Selbst wenn der implementierte Code das würde, siehe Methode jahr().

Das steht in "Die C++ Programmiersprache" von Bjarne Stroustrup. 4., aktualisierte Ausgabe. Deutsche Ausgabe der Special Edition.

Meinst du das?

pfefferkeks
21-06-2005, 11:35
Hi,

also const Funktionen sind dafuer gut das eine Abeleitete Klasse diese nicht mehr veraendern kann. Somit kannst Du als entwickler deiner Klasse sicherstellen das eben ganua das in der Funktion Passiert was Du wolltest.

gruesse Pfefferkeks

Joghurt
22-06-2005, 00:50
also const Funktionen sind dafuer gut das eine Abeleitete Klasse diese nicht mehr veraendern kann.Das wäre mir neu...
Meines Wissens nach sorgt ein "const" dafür, dass "this" nicht mehr vom Typ "Klasse*", sondern vom Typ "Klasse const*" ist. M.a.W. sagst du damit aus, dass diese Funktion die Klassenvariablen nicht verändert. Dies hat 2 Vorteile: erstens kann der Compiler optimieren, zweitens kannst du diese Funktionen aufrufen, wenn du eine "const Klasse&" hast (die z.B. dir von einer anderen Funktion zurückgegeben wurde).

Überschreiben kannst du diese Funktionen dennoch.

Beispiel:
class Foo {
public:
void Bar() {}
void Baz() const {}
};

int main()
{
const class Foo* foo = new Foo();
Foo->Baz(); // OK
Foo->Bar(); // Fehler
}