komischer konstruktoraufruf!



  • hab hier nen kleinen verständnisproblem beim aufruf von konstruktoren:

    class X {
      private:
    
        int data;
    
      public:
        ~X()
        {
          cout << "Destruktor  " << data << '\n';
        }
    
        X(int d = -1) : data(d)
        {
          cout << "Allgemeiner Konstruktor  " << data << '\n';
        }
    
        X(const X &x) : data(x.data)
        {
          cout << "Kopierkonstruktor  " << data << '\n';
        }
    
        X& operator=(const X& x)
        {
          data = x.data;
          cout << "Zuweisungsoperator  " << data << '\n';
          return *this;
        }
    };
    
    void g(X &a)
    {
      cout << '\n' << "Start g" << '\n';
      X b = a;
      cout << "Ende g" << '\n';
    }
    
    X a(0);
    
    int main()
    {
      cout << '\n' << "Start main" << '\n';
    
      X a;
      a = 20;
    
      return 0;
    }
    

    es geht um das a=20. das verhält sich ja genauso wie a=X(20). oder? irgendwie verstehe ich das nicht ganz. wie wird denn da erkannt was gemeint war?



  • steffanJ schrieb:

    es geht um das a=20. das verhält sich ja genauso wie a=X(20).

    Das ist der Aufruf des Zuweisungsoperators. Es gibt nur den einen, der ein X per Referenz annimmt, also wird aus 20 über den Konstruktor ein temporäres X-Objekt angelegt und dem Zuweisungsoperator übergeben.



  • X kann man implizit über den Konvertierungskonstruktor aus einem int erzeugen. Mach den Konstruktor mal explicit , dann geht das nicht mehr.



  • ah...ok. vielen dank! habs verstanden!



  • ...


Log in to reply