Delphi's "inherited" in BCB?



  • Hi,

    ich habe ganz kurze Fragen zu einigen wenigen Syntaxbefehlen, die ich gern übersetzt wüsste:

    (a) constructor Create; overload; (da gibt es dieses ~, aber direkt selbst habe ich das noch nicht geschrieben, ist ja beim bcb immer sofort im code)
    (b) destructor TSpecialData.Destroy;
    (c) property <i>Name</i>: String read cName write cName;
    (d) TSpecialData=class(TBasicData)
    (e) procedure...; override;
    (f) inherited Destroy;
    (g) AllocMem() ... (allocate?)
    (h) inherited Create;

    Die ihr wisste, bitte in BCB-Code übersetzen - Danke!



  • Ich glaube ein C++-Tutorial und die BCB-Hilfe reichen da schon aus.



  • hi,

    a) überladener (nicht virtueller) construktor
    b) in cpp die sache mit dem ~
    c) __property int Eigenschaft = {read = ..., write = ...}
    d) class TSpezialData : public TBasicData {};
    e) virtuelle also überschreibbare routine (nicht überladen) virual...
    f) aufruf basisklasse z. b. TForm::Dispatch();
    g) routine um speicher zu allozieren und freizugeben, gibt es in c auch
    h) siehe f

    mfg
    murph



  • danke, aber:

    zu a) also: __fastcall TForm1::TForm1(TComponent* Owner) oder?
    zu b) __fastcall TForm1::~TForm1(TComponent* Owner) oder?
    zu f/h) also "inherited Destroy;/inherited Create;" = TForm:Dispatch(); ?



  • Habe ich richtig verstanden?

    inherited Destroy; = TFormDispatch();
    inherited Create; = TFormDispatch();



  • hi michael,

    was ich damit sagen wollte, ist das inherited unter delphi bedeutet, die funktionalität der vorgängerklasse aufzurufen, dass nach dem eigenen erweiterten code das std.-verhalten greift. inherited als schlüsselwort gibt es unter cpp aber nicht. einen ähnlichen effekt erhält man indem man die betreffende funktionalität der entsprechenden classe aufruft (TForm::Dispatch(Msg);)...

    mfg
    murph



  • Ok, letzte Verständnisfrage, denn ich muss es ja letztendlich übersetzen und kann nicht nur einen kommentar hinschreiben 🙂 =>

    Ist "inherited Create;" nun TForm:Dispatch(Create); oder nicht? Es wäre nett, dass du mir die richtige Variante nennen könntest (sollte mein Verständnis falsch interpretiert haben!)



  • Ok, letzte Verständnisfrage, denn ich muss es ja letztendlich übersetzen und kann nicht nur einen kommentar hinschreiben =>
    Ist "inherited Create;" nun TForm:Dispatch(Create); oder nicht? Es wäre nett, dass du mir die richtige Variante nennen könntest (sollte mein Verständnis falsch interpretiert haben!)



  • hallo,

    also ganz genau das selbe ist es natürlich nicht. beim überschreiben einer methode ergäntzt man diese ja, manchmal komplett, aber manchmal möchte man nur um etwas ergänzen. dann schreibt man:
    Firgendwas = i++;
    ...
    //nach diesem code soll die funtkion wie die ursprügnliche weiterlaufen, schreibt man in pascal:
    inherited; //oder inherited(Create) //ohne Create(AOwner); will man das der usrprüngliche code vor der ergänztung läuft macht man es andersrum:
    inherited;
    Firgendwas = i++;

    wenn ich z. b. im builder die syscom message abfangen mache ich das in etwas so:

    //Header.
    class TForm1 : public TForm
    {
    __published:    // Von der IDE verwaltete Komponenten
    private:    // Anwender-Deklarationen
    public:     // Anwender-Deklarationen
        __fastcall TForm1(TComponent* Owner);
        void __fastcall OnSysCommand(TWMSysCommand & SysCom);
    protected:
        BEGIN_MESSAGE_MAP
            VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TWMSysCommand, OnSysCommand)
        END_MESSAGE_MAP(TForm)
    };
    
    //CPP.
    void __fastcall TForm1::OnSysCommand(TWMSysCommand & SysCom)
    {
        switch (SysCom.CmdType)
            {
                case SC_CLOSE: Close(); break;
            default: TForm::Dispatch(&SysCom);
            //in delphi: else inherited;
            }
    }
    

    teste mit diesem code etwas herum und du wirst die bedeutung erkennen. kommentiere z. b. das default einmal aus und versuche zur laufzeit die form auf dem desktop zu verschieben, zu vergrößern oder sonstige std-funktionalität auszuführen, bis auf schließen nix gewesen. lässt du das default aber drin, dann funktioniert alles ganz normal. dem dispatch mußte man in diesem fall &syscom übergeben, was du evt. bei deiner anwendung übergeben mußt weiss ich nicht und will es auch gar nicht wissen...

    mfg
    murph


Anmelden zum Antworten