2010-06-25 7 views
7

ich Konstrukteuren gerade lese,Verwendung von Konstrukteurs - Odd Doubt

Wenn ein Objekt für eine Klasse instanziiert wird, c'tors (wenn ausdrücklich geschrieben oder eine Standard) sind die Ausgangspunkte für die Ausführung. Meine Zweifel sind

  • ist ein c'tor mehr wie die main() in C
  • Ja ich den Punkt zu verstehen, dass Sie alle Standardwerte mit c'tor einstellen. Ich kann das Verhalten auch emulieren, indem ich eine benutzerdefinierte Methode schreibe. Warum dann ein C'tor?

Beispiel:

//The code below is written in C#. 
public class Manipulate 
    { 
     public static int Main(string[] args) { 
      Provide provide = new Provide(); 
      provide.Number(8); 
      provide.Square(); 
      Console.ReadKey(); 
      return 0; 
     } 
    } 

public class Provide { 
     uint num; 
     public void Number(uint number) 
     { 
      num = number; 
     } 
     public void Square() 
     { 
      num *= num; 
      Console.WriteLine("{0}", num); 
     } 
    } 

Am Lernen unabhängig zu programmieren, so dass ich je nach Programmierung Communities, können Sie mir empfehlen auch eine Ressource gute OOP ein besseres Verständnis zu bekommen. Wenn es um ein Thema geht bitte entschuldigen Sie mich.

+1

Es ist nur eine Abkürzung, so dass Sie nicht unnötig 5 zusätzliche Zeilen Code schreiben müssen, die nichts anderes als Setter sind. –

Antwort

3

Kopf zuerst OOA & D wird ein guter Anfang sein.

Haben Sie nicht das Gefühl, eine Funktion zum Einstellen jeder Mitgliedsvariable Ihrer Klasse aufzurufen, ist dies ein wenig Aufwand.

Mit einem Konstruktor können Sie alle Ihre Mitgliedsvariablen auf einmal initialisieren. Ist das nicht genug für Konstrukteure?

+0

Mein ganzer Punkt ist, was andere Verwendung haben Sie als Initialisierung von Elementvariablen. Oder ist es eher so, anstatt eine separate Methodendeklaration für die Initialisierung zu haben, tun Sie es mit dem Konstruktor? – Chaitanya

+0

Nun, darum geht es bei OOP! – ckv

1

Im Allgemeinen sollten Sie alle Ihre Initialisierung im Konstruktor vornehmen. Der Konstruktor wird zuerst aufgerufen, wenn eine Instanz Ihrer Klasse erstellt wird. Sie sollten daher hier alle Standardwerte festlegen.

2

Die Konstruktor- und Destruktor-Funktionalität kann mit regulären Methoden emuliert werden. Was diese zwei Arten von Methoden einzigartig macht, ist jedoch, dass die Sprache sie auf eine besondere Weise behandelt.

Sie sind automatisch aufgerufen, wenn ein Objekt erstellt oder zerstört wird. Dies stellt ein einheitliches Mittel dar, um die empfindlichsten Vorgänge zu bewältigen, die während dieser zwei kritischen Perioden der Lebensdauer eines Objekts stattfinden müssen. Es schließt die Möglichkeit aus, dass ein Endbenutzer einer Klasse vergisst, diese zu den geeigneten Zeiten anzurufen.

Darüber hinaus erfordern erweiterte OO-Funktionen wie Vererbung, dass Einheitlichkeit sogar funktioniert.

2

Zunächst hängen die meisten Antworten zumindest ein wenig von der Sprache ab, die Sie verwenden. Gründe, die in einer Sprache sinnvoll sind, haben nicht unbedingt direkte Analogien in anderen Sprachen. Zum Beispiel gibt es in C++ einige Situationen, in denen temporäre Objekte automatisch erstellt werden. Der ctor wird als Teil dieses Prozesses aufgerufen, aber für die meisten praktischen Zwecke ist es unmöglich, explizit andere Mitgliedsfunktionen in dem Prozess aufzurufen. Dies trifft jedoch nicht unbedingt auf andere OO-Sprachen zu - einige werden implizit überhaupt keine temporären Objekte erzeugen.

1

Ich denke, ein guter Weg zu lernen ist OOP zwischen Sprachen zu vergleichen, es ist wie das gleiche Bild aus verschiedenen Blickwinkeln zu sehen.

Googeln eine Weile:

Warum Bauer? Der Hauptunterschied zwischen einer einfachen Funktion (die auch Funktionen innerhalb haben könnte) und einem Objekt ist die Art und Weise, wie ein Objekt innerhalb einer "Variablen" gehostet werden kann, mit allen Funktionen darin, und die auch völlig anders auf eine reagieren kann andere "Variable" mit der gleichen Art von "Objekt" innerhalb. Die Art und Weise, wie sie die gleiche Struktur mit unterschiedlichen Verhaltensweisen haben, hängt von den Argumenten ab, die Sie der Klasse gegeben haben. Also hier ist ein faules Beispiel:

Auto() ist jetzt eine Klasse.

c1 = Auto()

c2 = Auto()

¿c1 ist genau c2? Ja.

c1 = car (Volkswagen)

c2 = car (lamborghini)

C1 hat die gleichen Funktionalitäten als C2, aber sie sind completly diferent Arten Auto() Variables Volkswagen und lamborghini direkt übergeben wurden zum Konstruktor. Warum ein -Konstruktor-? Warum nicht irgendeine andere Funktion? Die Antwort lautet: Bestellung.

Das ist mein bester Schuss, Mann, für diese späten Stunden. Ich hoffe, ich habe irgendwie geholfen.

1

Sie können den Konstruktor nicht in einer benutzerdefinierten Methode emulieren, da die benutzerdefinierte Methode beim Erstellen des Objekts nicht aufgerufen wird. Nur der Konstruktor wird aufgerufen. Nun, natürlich können Sie dann Ihre benutzerdefinierte Methode aufrufen, nachdem Sie das Objekt erstellt haben, aber dies ist keine Konvention und andere Personen, die Ihr Objekt verwenden, werden dies nicht wissen.

Ein Konstruktor ist nur eine Vereinbarung, die als eine Möglichkeit vereinbart wird, Ihr Objekt einzurichten, sobald es erstellt wird.

0

Einer der Gründe, warum wir Konstruktor brauchen ‚Kapselung‘, ist der Code etwas Initialisierung muss unsichtbar

0

Sie können auch nicht die Übergabe von Variablen erzwingen, ohne einen Konstruktor. Wenn Sie ein Objekt nur dann instanziieren möchten, wenn Sie ein int angegeben haben, das übergeben werden soll, können Sie den Standardkonstruktor als privat definieren und Ihren Konstruktor veranlassen, einen int zu verwenden. Auf diese Weise ist es unmöglich, ein Objekt dieser Klasse zu erstellen, ohne dass es einen int braucht.

0

Unterobjekte werden im Konstruktor initialisiert. In Sprachen wie C++, in denen Unterobjekte innerhalb des enthaltenden Objekts existieren (anstatt als separate Objekte, die über Zeiger oder Handles verbunden sind), ist der Konstruktor die einzige Möglichkeit, Parameter an Unterobjektkonstruktoren zu übergeben. Sogar in Java und C# ist jede Basisklasse direkt enthalten, daher müssen Parameter für ihren Konstruktor von Ihrem Konstruktor bereitgestellt werden.

Schließlich kann jede Konstante (oder in C#, readonly) Member-Variablen nur aus dem Konstruktor festgelegt werden. Selbst Hilfsfunktionen, die vom Konstruktor aufgerufen werden, können sie nicht ändern.