3. Beispielprogramm



  • Dies ist ein weiteres Programm, das mir Kopfzerbrechen macht.

    #include <iostream>
    using namespace std;
    class Vektor
    {
      public:
        Vektor(int dim = 1);
        Vektor(const Vektor &v);  
    
        void setzen(double d = 0.0); 
        void ausgeben() const;    
    
      private:
        int m;              
        double data[10];    
    };
    
    Vektor::Vektor(int dim)
    {
    	m = dim;
    }
    
    Vektor::Vektor(const Vektor &v)
    {
    	m = v.m;
    	for(int index = 0; index < m; index++)
    	  data[index] = v.data[index];
    }
    
    void Vektor::setzen(double d)
    {
    	for(int index = 0; index < m;index++ )
    	  data[index] = d;
    }
    
    void Vektor::ausgeben() const
    {
    	printf("(");
    	for(int index = 0; index < m; index++)
    	  printf(index < m - 1 ? "%f " : "%f", data[index]);
    	printf(")\n");
    }
    
    int main()
    { 
    	Vektor a(3);
    	a.ausgeben(); //1
    	a.setzen(1.0); //2
    	a.ausgeben();
    
    	Vektor b(4), c(a);
    	b.ausgeben();  //3
    	c.ausgeben();  //4
    
    	return 0;
    }
    

    Ich gebe zu, dass ich schon allein nichts von Kopierkonstruktoren verstanden habe. Allerdings ist die Ausgabe völlig irritierend.
    Für 1: (NaN 0 0)
    2: (1 1 1)
    3:(Wahllose Zahlenkolonnen)
    4: (1 1 1)
    Die Ausgabe von 1 und 3 verstehe ich nicht. Hat mein Compiler vielleicht doch ne Macke?
    😕 😕



  • Dein int-Konstruktor ("Vector::Vector(int dim)") initialisiert zwar die Dimension deines Vektors, aber nicht die Daten - also hast du nach dem Aufruf willkürliche Werte in deinem Array drinstehen.



  • Luka_one schrieb:

    Die Ausgabe von 1 und 3 verstehe ich nicht. Hat mein Compiler vielleicht doch ne Macke?

    Welche Ausgabe hättest du denn erwartet?



  • kannst du nicht mal alle deine beispiele in einem thread posten?



  • Danke euch.
    Sorry, ich hätte meine Beispiele wirklich alle zusammenfassen sollen.
    Und man sieht den Wald vor lauter Bäumen nicht....
    Danke CStoll, du hast mich auf was aufmerksam gemacht, was ich beim verzweifelten Versuch das Programm zu verstehen übersehen hatte.

    Vektor a(3);
    	a.setzen();
    	a.ausgeben();
    	a.setzen(1.0);
    	a.ausgeben();
    
    	Vektor b(4), c(a);
    	b.setzen();
    	b.ausgeben();
    	c.ausgeben();
    

    So muss das Programm eigentlich aussehen, wenn's richtig funktionieren soll.
    Ich hatte mich so verbissen, dass ich nicht drauf gekommen war, also danke! 😉



  • Imho sollte der Konstruktor, der eine Zahl für die Größ entgegennehmen kann explicit sein. Das heißt, man muß ihn manuell aufrufen. Sonst passieren so unschöne Effekte wie:

    Vektor a(3);
    a = 1;
    // jetzt hat der Vektor nur noch Dimension 1
    // wer das haben will sollte explizit folgendes schreiben müssen:
    a = Vektor(1);
    

Anmelden zum Antworten