Operatorüberladung
-
Kann mir wer sagen warum hier March ausgeben wird?
cout<<"m: " << month_tbl[m]<<endl; // March?Ich habe dem Objekt m im Hauptprogramm doch den Wert 2 geben.
#include <iostream> using namespace std; //------------------------------------------------------------------------------ enum Month { jan=1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dcm }; //------------------------------------------------------------------------------ ostream& operator<<(ostream& os, Month m) { static const char* month_tbl[12] = { "January","February","March","April","May","June","July", "August","September","October","November","December" }; cout<<"m: " << month_tbl[m]<<endl; // March? return os << month_tbl[m-1]; } //------------------------------------------------------------------------------ int main() { Month m = 2; // Month m = feb; cout << m << endl; cin.get(); return 0; } //------------------------------------------------------------------------------
-
Weil die Werte deine Aufzählung nicht den Indizes des Array entsprechen. Ein Array beginnt immer mit dem Index 0, also liefert
month_tbl[2]auch immer "March" zurück.
-
In C++ fängt man mit 0 an zu zählen. Januar ist also 0 und Februar 1 etc.
-
[0] ist January
[1] ist February
[2] ist March
Funktioniert alles wie es sollte. Index fängt bei 0 an.