Frage zu Konstruktor



  • Kladdi schrieb:

    Hatte ich mir auch überlegt, aber ein zweidimensionales Array erschien mir "edler".

    Du meinst fehleranfälliger und ineffizienter. Ja, edler könnte man es auch nennen. 😃



  • class Matrix
    {
    
    public:
        Matrix( unsigned int n, unsigned int m );
        Matrix( const Matrix& m );
        ~Matrix();
    
    protected:
        int *matrix;
        int rows;
        int columns;
    
    };
    
    Matrix::Matrix( unsigned int n, unsigned int m )
    {
        rows = n;
        columns = m;
        matrix = new int[n*m];
    }
    
    int main(int argc, char *argv[])
    {
    
        Matrix test = new Matrix(2,2);
    
    return 0;
    
    }
    

    Sieht das besser aus? Es funktioniert leider noch nicht weil der Ausdruck in der main nicht will (conversion from 'Matrix*' to non scalar type 'Matrix' requested). Was hab ich jetzt schon wieder falsch gemacht?



  • Matrix* test = new Matrix(2,2);
    

    :p



  • Benutze bitte [cpp]-Tags, nicht [code]-Tags. Anmerkungen als Kommentare im Code:

    class Matrix
    {
    public:
        Matrix( unsigned int n, unsigned int m );
        Matrix( const Matrix& m );
        ~Matrix();
        // Zuweisungsoperator fehlt
    
    protected: // Nimm private
        int *matrix;
        int rows;
        int columns;
    };
    
    Matrix::Matrix( unsigned int n, unsigned int m )
    {
        // Benutze dafür die Konstruktor-Initialisierungsliste!
        rows = n;
        columns = m;
        matrix = new int[n*m];
    }
    
    int main(int argc, char *argv[])
    {
        // Warum Java? C++ wäre:
        // Matrix test(2, 2);
        Matrix test = new Matrix(2,2);
    }
    

    Kladdi schrieb:

    Was hab ich jetzt schon wieder falsch gemacht?

    Du solltest dir wirklich anschauen, was Zeiger sind und was new bzw. delete tun. Genauso, dass es in C++ nicht nur dynamische Speicherverwaltung gibt. Sonst kommst du nirgendwohin.



  • Was? Also in guter Java-Manier würde das doch funktionieren 😉
    Kannst du mir erkären warum ich hier mit Pointern arbeiten muss?

    €: bezieht sich auf dweb



  • Kladdi schrieb:

    Was? Also in guter Java-Manier würde das doch funktionieren 😉

    Was rein gar nichts zur Sache tut. Aber schau dir meinen letzten Abschnitt des vorherigen Posts an.



  • Was meinst du mit Zuweisungsoperator? "=" ?

    const Matrix& operator = ( const Matrix& m );

    ...würde dann fehlen.



  • Kladdi schrieb:

    Was meinst du mit Zuweisungsoperator?

    Ui, da fehlen ja wirklich viele Grundlagenkenntnisse. Das ist nicht böse gemeint, aber es macht wirklich mehr Sinn, wenn du C++ von Grund auf neu lernst, statt von Java umlernst. Vieles bleibt zwar gleich (v.a. prozedurale Dinge), aber bei OOP und Objekten sind die Gemeinsamkeiten nur oberflächlich.

    Hast du überhaupt ein C++-Buch, mit dem du dir die Sprache beibringst? Falls nicht, besorge dir z.B. den C++ Primer oder Thinking in C++ (auch gratis als Online-PDF). Aber z.B. mit Online-Tutorials alleine erreichst du nicht viel.



  • Naja, ich hatte eine 45-minütige Einführung in C++ und die Hoffnung, dass ich dank Python und Java die Sprache schnell verstehen werde. Ich schau mir mal Thinking in C++ an. Danke!



  • Kladdi schrieb:

    Naja, ich hatte eine 45-minütige Einführung in C++

    Und du hast im Ernst gedacht, das würde reichen? 😮

    C++ ist eine sehr komplexe Sprache. Du brauchst Monate, bis du darin einigermassen vernünftig programmieren kannst. Und Jahre, um C++ wirklich gut zu beherrschen.

    Du kannst natürlich auch versuchen, dir diese Zeit zu "sparen". Aber das klappt meistens nicht, weil man doch dauernd mit Wissenslücken konfrontiert wird, die einem unnötige Zeit rauben. Also empfehle ich dir, gleich richtig anzufangen. 😉



  • Tja, dann wird wohl jeder Besucher der Vorlesung durchfallen... Ich melde mich wieder wenn ich endlich einigermaßen weiss was ich hier mache.



  • Und du hast im Ernst gedacht, das würde reichen? 😮

    C++ ist eine sehr komplexe Sprache. Du brauchst Monate, bis du darin einigermassen vernünftig programmieren kannst. Und Jahre, um C++ wirklich gut zu beherrschen.

    Du kannst natürlich auch versuchen, dir diese Zeit zu "sparen". Aber das klappt meistens nicht, weil man doch dauernd mit Wissenslücken konfrontiert wird, die einem unnötige Zeit rauben. Also empfehle ich dir, gleich richtig anzufangen. 😉

    Danke noch einmal für diesen Kommentar. Ich hatte mir nun überlegt, dass ich eventuell die Veranstaltung, für die ich C++ benötige, komplett fallen lasse uns stattdessen mich mit einem gescheiten Buch auseinandersetze. Ich hatte dabei an "Einführung in die Programmierung mit C++" vom C++ Erfinder Stroustrup gedacht. Ist das Buch OK? Andere Empfehlungen?


Anmelden zum Antworten