Konstruktor
Paul
- programmiertechnik
0 Jens Holzkämper0 Paul0 Vinzenz Mai0 hotti0 Paul0 hotti0 Paul0 Matti Mäkitalo0 hotti
Moin.
Schreibt man den Konstruktor innerhalb der Class oder außerhalb?
C++
Tach,
Schreibt man den Konstruktor innerhalb der Class oder außerhalb?
C++
Klausur? Hausaufgabe? Google!
mfg
Woodfighter
Klar. Gehen tut beides. Aber wo liegen die Vor- und Nachteile?
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
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
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...
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
... 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?
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
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
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