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. 😉


Anmelden zum Antworten