Objektorientierte Programmierung , Vererbung , Konstruktoren kopieren
Angenommen ich habe eine Basisklasse Person
und ich öffentlich eine Klasse Erben Teacher
von der Basis-Klasse Person
.
Jetzt in der main-Funktion, die ich etwas schreiben wie dieses
//name will be passed to the base class constructor and 17
//is for derived class constructor.
Teacher object(“name”,17) ;
Teacher object1=object; //call to copy constructor
Nun ich habe nicht geschrieben, das Kopier-Konstruktor für beide Klassen, natürlich die Standard-copy-Konstruktoren aufgerufen werden. Die Person-Klasse Standard-copy-Konstruktor wird zunächst rufen Sie die base-Klasse einen copy-Konstruktor.
Das problem ist jetzt angenommen, ich Schreibe in den copy Konstruktor der Basisklasse nur, was passiert ist, ist der Standard-kopierkonstruktor der abgeleiteten Klasse wird nennen meine schriftliche Kopie-Konstruktor.
Nun mal angenommen, ich Schreibe in den copy-Konstruktor für beide Klassen . jetzt den copy-Konstruktor von der abgeleiteten Klasse (ich.e-Lehrerin) rufen Sie den Standardkonstruktor der Basisklasse, aber nicht der copy Konstruktor, warum?
Ist nur die Standard-copy-Konstruktor der abgeleiteten Klasse aufrufen der copy-Konstruktor der Basis-Klasse automatisch?
- Es gibt nicht so etwas wie "Standard-Copy-Konstruktor". Aber ja, der compiler-generierte copy-Konstruktor ruft den copy-Konstruktor der Basisklasse auf.
- danke jetzt habe ich verstanden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie rufen Sie die base-copy-Konstruktor explizit:
Sonst
Person
's default-Konstruktor aufgerufen wird.Ich scheine nicht zu verstehen die Frage, so werde ich nur sagen, alles, was ich denken, ist relevant und hoffentlich hilft die OP.
Alle benutzerdefinierten Konstruktoren aufrufen, Ihre Basis, Standard-Konstruktor standardmäßig (es sei denn, Sie rufen explizit einen anderen Konstruktor), ist es egal, ob die Basis-Standard-Konstruktor wird vom Benutzer definiert oder compiler erzeugt.
Wenn ein Kopie-Konstruktor vom compiler generiert wird, erfolgt ein Aufruf der Basis-Klasse einen copy-Konstruktor.
Compiler definierten Konstruktoren sind nicht besonderes, Sie können jedoch explizit aufgerufen werden:
Weitere details finden Sie unter diesem Wikipedia-Artikel.
Wenn Sie nicht angeben, eine Kopie-Konstruktor, generiert der compiler automatisch. Dieser Konstruktor erzeugt wird, in einer Weise, dass es ruft den copy-Konstruktor der Basisklasse auf.
Wenn Sie bei der Implementierung der copy-Konstruktor sich selbst, müssen Sie auch angeben, welche Basisklasse Konstruktor verwendet werden soll (siehe Motti ' s Antwort). Wenn Sie nicht etwas angeben, der default-Konstruktor verwendet wird (Das ist, warum es heißt "Standard-Konstruktor": es wird verwendet, wenn kein Konstruktor explizit angegeben).
DAMIT der compiler generiert automatisch einen vernünftigen copy-Konstruktor, aber wenn Sie etwas besonderes wollen keine weitere Magie passiert, und Sie haben, um selbst festzulegen, wie dieser Konstruktor genau Aussehen sollte.