![]() |
Re: Verwirrung mit override/overload bei Constructoren
mit overload sagst du dem compiler einfach nur das es zwei methoden mit gleichem Namen gibt. Mit override überschreibst du eben die Methode aus der Klasse von der deine Klasse erbt. Wenn also jemand deine klasse auf die Vorgängerklasse castet und die Methode aufruft wird trotzdem deine neue Aufgerufen (trotz des casts) weil du sie eben überschrieben hast.
Und verdecken heißt einfach das du eine Methode nicht überschreibst diese dann aber nicht mehr aufrufbar ist außer man castet auf dein vorfahren wo noch nichts verdeckt ist. @robert: in dem Fall scheint es mir dann auch mehr als sinnvoll so vorzugehen wie du es beschrieben hast. |
Re: Verwirrung mit override/overload bei Constructoren
Alle Klassen, die von TComponent abgeleitet wurden, haben einen virtuellen Konstruktor.
Dieser Konstruktor MUSS benützt werden, oder alles "geht in die Hosen". Siehe Betrag #4 !! |
Re: Verwirrung mit override/overload bei Constructoren
Zitat:
Zitat:
Dann hat das alles auch Sinn. Und nach einer erfrischenden Nacht, verstehe ich auch mittlerweile wieder was ich da mal programmiert habe :wink: Zitat:
Aber die Idee mit der Exception im Default-Konstruktor gefällt mir.... muss ich mir merken. Und es ist klar, dass man solche Sachen nicht für Komponenten verwendet. Danke für die Diskussion. |
Re: Verwirrung mit override/overload bei Constructoren
Bei C++ hat man nur genau einen Konstruktor. Delphi macht da ein paar Tricks die Konstruktoren doch abzubilden, aber es laesst sich nicht vollstaendig abbilden. Nicht immer aber gelegentlich laesst sich dann eine Komponente nicht im C++ Builder benutzen.
|
Re: Verwirrung mit override/overload bei Constructoren
Zitat:
Code:
sind doch zwei Konstruktoren, oder nicht? Und dies sind Beispiele aus Büchern, die keinerlei Bezug auf den C++-Builder haben.
class Auto
{ private: int AnzahlRaeder; double Motorleistung; public: // Defaultkonstruktor: Auto() { Motorleistung = 0.0; AnzahlRaeder = 4; } // überladener Konstruktor: Auto( double LeistungKW, int nRad = 4 ) { Motorleistung = LeistungKW; AnzahlRaeder = nRad; } }; Du hast in C++ genau einen Default-Konstruktor, da gebe ich dir recht. Wenn du ein überschreibenden Konstruktor erstellst, dann musst du auch den Default-Konstruktor definieren. Aber du hast mehrere Konstruktoren. Wo ich dir recht gebe, ist der Frust mit der VCL im C++-Builder, da die VCL auch im C++-Builder in Delphi geschrieben ist, sind gerade in der Komponentenentwicklung ein paar krampfige Fingerbruch-Übungen zu machen. Es kann sein, dass da auch was mit Konstruktoren zu Berücksichtigen gab, dazu arbeite ich schon wieder zu lange nicht mehr mit dem C++-Builder. BTW: ein Vorschlag für DP07: Code-Tag für c++ wäre nett....... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz