Paul: Konstruktor

Moin.
Schreibt man den Konstruktor innerhalb der Class oder außerhalb?
C++

  1. Tach,

    Schreibt man den Konstruktor innerhalb der Class oder außerhalb?
    C++

    Klausur? Hausaufgabe? Google!

    mfg
    Woodfighter

    1. Klar. Gehen tut beides. Aber wo liegen die Vor- und Nachteile?

      1. Hallo,

        Klar. Gehen tut beides. Aber wo liegen die Vor- und Nachteile?

        welchen Vor- und Nachteil hat die Verwendung von Headerdateien?

        Freundliche Grüße

        Vinzenz

      2. Klar. Gehen tut beides. Aber wo liegen die Vor- und Nachteile?

        Was, es geht Beides!? Schlamperei ;-)

        Ne, mal im Ernst, Paul: Ein Konstruktor erzeugt ein Objekt, eine Instanz der Klasse. Damit dürfte doch klar sein, wo der hingehört. Wenn in Deinem Programm mehrere Objekte rumschwirren, sollten die auch wissen, zu welcher Klasse die gehören.

        Disziplin! In Perl ist package main; der Namespace in dem das Programm abläuft. Ein Objekt der Klasse "main" erstellen? Kein Problem, das geht:

          
        package main;  
          
        # Variante 1  
        my $o = new();  
        sub new{  
          return bless [];  
        }  
          
        # Variante 2  
        my $o = main->new();  
        sub new{  
          my $class = shift;  
          return bless [], $class;  
        }  
        
        

        Also, wenns mich fragen: Variante 2 ist übersichtlicher auch ohne Kommentar.

        Hotti

        1. Ne, mal im Ernst, Paul: Ein Konstruktor erzeugt ein Objekt, eine Instanz der Klasse. Damit dürfte doch klar sein, wo der hingehört. Wenn in Deinem Programm mehrere Objekte rumschwirren, sollten die auch wissen, zu welcher Klasse die gehören.

          Danke erstmal für die Antwort. Allerdings weiis das Objekt doch "wo es hingehört". Egal ob der Konstruktor innerhalb der Klasse ist oder außerhalb...

          1. Ne, mal im Ernst, Paul: Ein Konstruktor erzeugt ein Objekt, eine Instanz der Klasse. Damit dürfte doch klar sein, wo der hingehört. Wenn in Deinem Programm mehrere Objekte rumschwirren, sollten die auch wissen, zu welcher Klasse die gehören.

            Danke erstmal für die Antwort. Allerdings weiis das Objekt doch "wo es hingehört". Egal ob der Konstruktor innerhalb der Klasse ist oder außerhalb...

            In dicken Büchern steht sicher mehr was da Vor- oder Nachteile sind. Ich sehe es in erster Linie aus der Sicht eines Praktikers, da ist es eine Frage der Ordnung und Übersicht. Die zweite Sache sind abgeleitete Klassen, Du leitest eine Klasse ab und erstellst eine Instanz der abgeleiteten Klasse, ohne dass Deine eigene Ableitung einen Konstruktor hat. Das Objekt erbt nun von der Basisklasse und genau dort sollte auch der Konstruktor zu finden sein, also auch eine Frage der Disziplin. Und drittens heißt der Konstruktor i.d.R. new(), davon darf es in einem Namespace nur Einen geben. Falls Du Deine Konstruktors "jahwe()", "henoch()", "noah()" oder so nennst, dann vergiss nicht, einen fetten Kommentar darüber zu schreiben und vorher die Bibel zu lesen ;-)

            Hotti

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. ... eine Frage der Ordnung und Übersicht. Die zweite Sache sind abgeleitete Klassen, ... Das Objekt erbt nun von der Basisklasse und genau dort sollte auch der Konstruktor zu finden sein ...

              Danke erstmal für Deine Geduld und ausführlichen Antworten!!!

              Also würdest Du die Konstruktoren innerhalb der Class setzen?

              1. Hallo,

                Also würdest Du die Konstruktoren innerhalb der Class setzen?

                ich würde einen Konstruktor oder irgendeine andere Methode *nicht* innerhalb der Klasse definieren, nur deklarieren. Ja, das ist allein eine Frage der Organisation. Ja, das ist weit verbreitete, weil sinnvolle Praxis. Aber das sagte ich Dir ja schon.

                In anderen Programmiersprachen kann das anders aussehen. Die sind aber für C++ nicht relevant.

                Freundliche Grüße

                Vinzenz

            2. Hi,

              In dicken Büchern steht sicher mehr was da Vor- oder Nachteile sind. Ich sehe es in erster Linie aus der Sicht eines Praktikers, da ist es eine Frage der Ordnung und Übersicht. Die zweite Sache sind abgeleitete Klassen, Du leitest eine Klasse ab und erstellst eine Instanz der abgeleiteten Klasse, ohne dass Deine eigene Ableitung einen Konstruktor hat. Das Objekt erbt nun von der Basisklasse und genau dort sollte auch der Konstruktor zu finden sein, also auch eine Frage der Disziplin. Und drittens heißt der Konstruktor i.d.R. new(), davon darf es in einem Namespace nur Einen geben. Falls Du Deine Konstruktors "jahwe()", "henoch()", "noah()" oder so nennst, dann vergiss nicht, einen fetten Kommentar darüber zu schreiben und vorher die Bibel zu lesen ;-)

              Der OP hat im Ausgangsposting "C++" geschrieben, daher gehe ich davon aus, dass er auch in C++ programmieren will. Und da ist es eben möglich, die Deklaration und Definition des Konstruktors zu trennen.
              Die Faustregel ist: was ein Zwei- bis Dreizeiler ist, kann u.U. inline geschrieben werden, alles andere wird ausgelagert.

              Bis die Tage,
              Matti

              1. hi Matti,

                Der OP hat im Ausgangsposting "C++" geschrieben, daher gehe ich davon aus, dass er auch in C++ programmieren will. Und da ist es eben möglich, die Deklaration und Definition des Konstruktors zu trennen.

                Dass es um die Trennung zwischen Deklaration und Definition geht, war mir nicht so klar, auch wenn Vinzenz erste Antwort darauf hinzielt.

                Die Faustregel ist: was ein Zwei- bis Dreizeiler ist, kann u.U. inline geschrieben werden, alles andere wird ausgelagert.

                Es gibt sicher noch mehr Gründe, Code auszulagern, z.B. kann ich in c++ eine Lib schonmal vorkompiliert aus der Hand geben, die beim Anwender über include "lib.h" eingebunden wird, ohne dem Anwender (hier ein weiterer Entwickler) mein ganzes KnowHow preiszugeben, was ich in die Entwicklung meiner lib.o gesteckt habe.

                Hotti

                --
                Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.