Ich bin verwirrt, was die Probleme sein könnten, wenn ein Konstruktor von einer Basisklasse geerbt wurde. Cpp Primer Plus sagt:
Konstruktoren unterscheiden sich von anderen Klassenmethoden darin, dass sie neue Objekte erstellen, während andere Methoden von vorhandenen Objekten aufgerufen werden . Dies ist einer der Gründe, warum Konstruktoren nicht vererbt werden . Vererbung bedeutet, dass ein abgeleitetes Objekt eine Basisklassenmethode verwenden kann. Bei Konstruktoren ist das Objekt jedoch erst vorhanden, nachdem der Konstruktor seine Arbeit erledigt hat.
Ich verstehe, dass der Konstruktor aufgerufen wird, bevor die Objektkonstruktion abgeschlossen ist.
Wie kann es zu Problemen kommen, wenn eine untergeordnete Klasse den übergeordneten Konstruktor erbt ( mit erbt ist gemeint, dass die untergeordnete Klasse die übergeordnete Klassenmethode usw. überschreiben kann. Nicht nur auf die übergeordnete Klassenmethode zugreifen kann )?
Ich verstehe, dass es nicht notwendig ist, einen Konstruktor explizit aus einem Code heraus aufzurufen [was mir noch nicht bekannt ist.], Außer beim Erstellen von Objekten. Selbst dann können Sie den übergeordneten Konstruktor [In cpp, using ::
oder using member initialiser list
, In java using super
] mithilfe eines Mechanismus aufrufen . In Java gibt es eine Erzwingung, um es in der ersten Zeile aufzurufen. Ich verstehe, dass sichergestellt werden soll, dass zuerst das übergeordnete Objekt erstellt wird und dann die Konstruktion des untergeordneten Objekts fortgesetzt wird.
Es kann es außer Kraft setzen . Aber ich kann mir keine Situationen einfallen lassen, in denen dies ein Problem darstellen kann. Wenn das Kind den übergeordneten Konstruktor erbt, was kann schief gehen?
Dies dient nur dazu, nicht unnötige Funktionen zu erben. Oder steckt noch mehr dahinter?