C++ Anfängerfrage

  • Hallo,
    In der aktuellen VDR Version hat Klaus einiges geändert, so das einige Plugins inkompatibel wurden.
    Evtl lerne ich aus dem Beipielen besser als aus den zahlreichen tut's die ich im Internet finde.


    Also, z.b das mp3 Plugin. Includiert vom VDR videodir.h
    Dort hat Klaus dies

    Code
    extern const char *VideoDirectory;


    in eine klasse cVideoDirectory und in eine Funktion static const char *Name(void); gepackt,


    Das Plugin greift über den Klassenamen auf die Funktion zu:
    Die Anpassung also

    Code
    ...cVideoDirectory::Name() ...


    und alles ist gut...
    So jetzt dem Problem was mein Delphihirn nicht versteht.
    Um Methoden einer Klasse benutzen zu können, muss erst eine Instanz erzeugt werden.
    z.b
    cVideoDirectory VideoDirectory; (den Constructor aufrufen damit die Klasse wirklich existiert)
    Die Methode wird dann in etwa so benutzt : VideoDirectory.Name()


    Mein Gedanke warum das Funktioniert:
    VDR erzeugt irgendwo eine Instanz von der Klasse cVideoDirectory (Also die Klasse gibt es im Speicher) und das Plugin greift quasi von außen darauf zu.

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Moin!


    "static"-Funktionen brauchen keine Instanz eines Objektes. Es sind quasi "normale" Funktionen im Namensraum der Klasse



    (unkompiliert, nur im Editor zusammengetippt)


    Siehe auch z.B. http://www.learncpp.com/cpp-tu…-static-member-functions/


    Lars.

  • Ok , also die static Funktionen machen den Unterschied. THX.


    Ist in deinem Beispiel

    Code
    this->EinFeld = Wert;


    Das this-> wirklich nötig ?
    Das sind auch so Dinge die nicht verstehe, EinFeld befindet sich doch schon in der eigenen Klasse.
    Wozu dann den Pointer this-> der auf die eigene klasse zeigt.

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Nein, this-> ist nicht nötig, kann man aber schreiben, muss man aber nicht. Nur dann, wenn es ansonsten doppeldeutig wäre.
    Ich hätte den Parameter auch EinFeld nennen können, dann wäre this nötig.
    Ich mach es mal so und mal so, je nachdem, was ich in dem Kontext für leserlicher halte und ob das Projekt entsprechende Codestyles hat.


    Häufig sieht man Konstruktoren, deren Parameter wie die Felder benannt sind. Dann kommt man nicht drum herum.


    Lars.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!