Konstruktor überladen



  • Moin,

    ich weiss das es möglich ist den Konstruktor zu überladen, ich würde aber gerne etwas in dieser Art machen:

    class clEins
    {
        private:
            int a;
            int b;
            int c;
        public:
            void aa()
            {
                a=1;
                b=2;
                c=a+b;
                //ausgabe 3
                cout<<"aa() "<<c<<endl;
            };
    
            void aa(int d)
            {
                aa();
                c=c+d;
                //ausgabe 6
                cout<<"aa(3) "<<c<<endl;
            };
    };
    
    int main()
    {
        clEins eins;
    
        eins.aa(3);
    
        return (EXIT_SUCCESS);
    }
    

    Ich habe das mit folgendem Code versucht:

    class clEins
    {
        private:
            int a;
            int b;
            int c;
        public:
            clEins()
            {
                a=1;
                b=2;
                c=a+b;
                //ausgabe 3
                cout<<"ctor clEins() "<<c<<endl;
            };
            clEins(int d)
            {
                clEins();
                c = c+d;
                //ausgabe 6
                cout<<"ctor clEins(3)"<<c<<endl;
    
            };
    };
    

    Aber das scheint nicht zu klappen. Geht das überhaupt?



  • Nein, das geht nicht - in C++ dürfen sich Konstruktoren nicht gegenseitig aufrufen. Als Lösung könntest du die gemeinsamen Teile in eine init()-Funktion auslagern, die von beiden Konstruktoren verwendet wird.

    (in deinem Beispiel ist es auch möglich, dem Ctor einen Default-Parameter mitzugeben: clEins(int d=0); )



  • Schade das es nicht geht. Dann muss ich mal sehen wie ich das mache. Ich denke ich werde es wohl über eine init()-Funktion machen. Danke für die Antwort.


Anmelden zum Antworten