const vor dem Funktion
-
Hallo
eine Funktion
int Ort::ausgabe()const { // code }ist eine constante Funktion die nichts von der Klasse Ort ändern darf.
Was macht aber eine Funktion die so aussiet ???
const int Ort::ausgabe(){ // code }bzw.
const int& Ort::ausgabe(){ // code }Ich verstehe nicht was ist da constant ???
-
Das hat nichts mit der Funktion selbst zu tun, sondern mit ihrem Rückgabetyp. Die "const int"-Funktion gibt einen konstanten Integer zurück (was an sich nicht so furchtbar sinnvoll ist). Die mit "const int&" gibt eine Referenz auf einen konstanten Integer zurück.
-
Ich habe gerade was ausprobiert. Bei meinem Beispiel unten, habe ich mich total verwirt. Was ist da für constante Referenz?? Wie ist es möglich sie zu ändern, so das ich Fehlermeldung herstelle ???
#include <iostream> using namespace std; class einTest{ private: int xKoordinate; int yKoordinate; public: const int& X() ; int Y() const; }; void main(){ einTest Test; int a; // ????? was ist bitte schön constant ???? a = (Test.X() + 1); cout << " a ist " << a << endl; ++a; cout << " a ist " << a << endl; } const int& einTest::X() { xKoordinate = 110; cout << xKoordinate << endl; return xKoordinate; } int einTest::Y() const{ return yKoordinate;}
-
Fehler:
Test.X() = 12;
-
Zusätzlich zu dem, was mein Vorredner sagt:
int a; // ????? was ist bitte schön constant ???? a = (Test.X() + 1); ++a;Das Ergebnis von Test.X()+1 wird nach a kopiert. a selbst ist nicht const, und kann natürlich verändert werden. Dadurch ändert sich aber Test.xKoordinate nicht, weil es nur eine Kopie ist. Beispiel mit Referenz:
//int& a = Test.X(); // Compilerfehler, weil a eine nicht-const-Referenz ist const int& a = Test.X(); // a++; // Fehler, weil constWenn einTest::X() eine nicht-const-Referenz zurückgeben würde, könnte man sowas machen:
int& a = Test.X(); a++; // Test.xKoordinate wurde erhöht