Warum wird Konstruktor anstelle von Funktionen verwendet?

8

Das ist eine sehr einfache Frage, ich habe sie durchsucht, aber ich möchte nur diese Community fragen, dass wir sowohl constructors als auch methods haben. Aber normalerweise verwenden wir Konstruktor, um die Variablen anstelle der Methoden zu initialisieren. Ich denke, dass beide verwendet werden können, um Variablen zu initialisieren. Was ist der grundlegende Unterschied zwischen beiden? Gibt es einen guten Grund? Dies ist eine sehr grundlegende Frage, also ertragen Sie es wegen des Niveaus des Anfängers. Danke im Voraus ..

    
Rafay Zia Mir 17.03.2012, 18:03
quelle

7 Antworten

6

Der wichtigste Unterschied: Wenn Sie ein Objekt instanziieren, wird sein Konstruktor aufgerufen, während das Aufrufen einer Methode immer optional ist. Sie könnten daher vergessen, Ihre Initialisierungsmethode aufzurufen und nicht alles korrekt zu initialisieren.

Zum Beispiel rufen all diese normalen Möglichkeiten zum Instanziieren eines Objekts den Konstruktor

auf %Vor%

Oder wenn Sie obligatorische Argumente haben, definieren Sie keinen Standardkonstruktor und erfordern stattdessen eine Konstruktion mit Parametern:

%Vor%

Dies hat den Vorteil, dass Sie die Argumente benötigen, bevor Sie die Klasse sogar instanziieren. Sie müssen also Folgendes tun:

%Vor%

und Fehler beim Konstruieren mit gültigen Argumenten werden zu einem Compilerfehler:

%Vor%

Also wann immer möglich, immer Fehler auf der Seite der Initialisierung in einem Konstruktor. In einigen Fällen ist ein Konstruktor möglicherweise nicht funktionsfähig. Die einzige Möglichkeit zum Scheitern eines Konstruktors besteht beispielsweise darin, eine Ausnahme zu verwenden. Das Scheitern zu konstruieren kann "Routine" und nicht wirklich außergewöhnlich sein. Auch Ausnahmen können auf manchen Architekturen teuer sein. Ein anderer Fall könnte sein, wenn Sie sicherstellen möchten, dass virtuelle Methoden vollständig gebunden sind, was nur nach der Konstruktion garantiert ist.

    
Doug T. 17.03.2012, 18:05
quelle
3

Sie können nicht beide zum Initialisieren von Elementvariablen verwendet werden. Es ist die Aufgabe des Konstruktors, Mitglieder zu initialisieren, und er wird automatisch aufgerufen, wenn Sie eine neue Instanz erstellen.

Betrachten Sie Folgendes:

%Vor%

Ohne den Konstruktor wäre es nicht möglich, das Mitglied x zu initialisieren.

    
Oliver Charlesworth 17.03.2012 18:05
quelle
1

Konstruktoren werden automatisch aufgerufen, sodass Sie sich keine Sorgen machen müssen, ob der Benutzer noch eine Initialisierungsmethode aufgerufen hat. Der Google-Style-Guide hat jedoch etwas zu Konstruktoren zu sagen :

  • Es gibt keine einfache Möglichkeit für Konstruktoren, Fehler zu signalisieren, abgesehen von Ausnahmen.
  • Wenn die Arbeit fehlschlägt, haben wir jetzt ein Objekt, dessen Initialisierungscode fehlgeschlagen ist, so dass es ein unbestimmter Zustand sein kann.
  • Wenn die Arbeit virtuelle Funktionen aufruft, werden diese Aufrufe nicht an die Unterklassenimplementierungen gesendet. Zukünftige Änderungen an Ihrer Klasse können dieses Problem ruhig einführen, selbst wenn Ihre Klasse derzeit nicht unterklassifiziert ist, was zu großer Verwirrung führt.
  • Wenn jemand eine globale Variable dieses Typs erstellt, wird der Konstruktorcode vor main () aufgerufen, wodurch möglicherweise einige implizite Annahmen im Konstruktorcode aufgehoben werden.

Die Empfehlung von Google besteht darin, eine direkte Initiierung in einem Konstruktor und eine nicht-triviale Initiierung in einer separaten Methode zu ermöglichen.

    
chrisaycock 17.03.2012 18:08
quelle
0

Der Konstruktor wird automatisch aufgerufen, wenn Sie das Objekt im Gegensatz zu einer Funktion erstellen. Außerdem wird der Konstruktor verwendet, um anzugeben die Absicht, dass dies für die Initialisierung des Objekts ist.

    
Gangadhar 17.03.2012 18:06
quelle
0

Stellen Sie sich vor, Sie haben eine Member-Variable, die keinen leeren Konstruktor hat. Dann haben Sie keine andere Möglichkeit, als sie in der Initialisierungsliste Ihres Konstruktors zu initialisieren.

Auch der Konstruktor wird aufgerufen, wenn Sie ein Array mit dem neuen Operator zuweisen, während die Initialisierung mit Methoden den Code komplizierter macht.

Im Allgemeinen ist eine komplexe Logik im Konstruktor keine sehr gute Idee, aber eine einfache Initialisierung sollte dort vorgenommen werden (die Dinge, die Sie tun müssen, um sicherzustellen, dass Ihr Objekt in einem gültigen Zustand ist).

    
Ivaylo Strandjev 17.03.2012 18:07
quelle
0

Die Initialisierung von Variablen ist zweifellos eine sehr wichtige Programmierpraxis. Wenn Sie Klassen verwenden, besteht die Option darin, sie innerhalb von Methoden zu initialisieren. Daher haben wir zwei Schritte: -

  1. Definieren Sie die Methode
  2. Rufen Sie die Methode auf, um die Initialisierung durchzuführen

Aber wenn der Aufruf der Methode vergessen wird, haben die Variablen am Ende Junk-Werte. Um dem Programmierer das Leben zu erleichtern, wurde das Konzept einer Konstruktormethode eingeführt.

Mit Konstruktoren haben wir nur einen Schritt: -

  1. Definieren Sie den Konstruktor

Der 'aufrufende Teil' wird automatisch ausgeführt, wenn ein neues Objekt der Klasse erstellt wird.

    
vaisakh 17.03.2012 18:12
quelle
0

Konstruktoren können für eine effiziente Speicherverwaltung verwendet werden, was mit Funktionen nicht möglich ist.

Destructor kann verwendet werden, um die Konstruktoren zu zerstören, wenn sie nicht benötigt werden.

Außerdem ist bekannt, dass die Verwendung von Kopierkonstruktoren Schwierigkeiten oder Fehler aufgrund von Speicherfehlern verhindert.

    
c geek 15.04.2014 12:23
quelle

Tags und Links