Unklarheit mit Schluesselwoertern in C++



  • pumuckl schrieb:

    zu 1): ein google nach "interface keyword c++" liefert dir schnell den Hinweis, dass es sich um c++ .NET handelt, also eine MSVC Eigenheit. das Schlüsselwort interface gibt es in Standard-C++ nicht.

    Dem wiederspreche ich, aber nur aus einem Grund: MS ViStu 6.0

    Dort war noch kein C++ .Net vorhanden. Ich gehe hier eher davon aus das entweder:
    a) Das Projekt doch nicht für MSVC6 gedacht ist (und du tatsächlich mit C++.Net richtig liegst)
    oder
    b) interface eher zu COM oder so gehört (musste mich nur als Anwender von COM-Controls bisher damit auseinander setzen).

    cu André



  • asc schrieb:

    b) interface eher zu COM oder so gehört (musste mich nur als Anwender von COM-Controls bisher damit auseinander setzen).

    Irgendwo in den Tiefen der windows.h-Welt gibt es ein
    #define interface struct



  • Das mit interface hat mich kürzlich auch gerade gewundert, auch weil es ebenfalls vom Syntaxhighlighting betroffen ist. Zudem ist es in MSVC++ auch möglich, beispielsweise Folgendes zu schreiben:

    class MyClass abstract
    {
    
    };
    

    Und MyClass ist damit abstrakt. Das Merkwürdige ist, dass selbst wenn man eine Klasse auf C++-Weise abstrakt macht (durch rein virtuelle Funktionen), man beim Darüberfahren mit dem Mauszeiger ein class MyClass abstract sieht.



  • Nexus schrieb:

    Das mit interface hat mich kürzlich auch gerade gewundert, auch weil es ebenfalls vom Syntaxhighlighting betroffen ist

    Unter MSVC2005/2008 ist das auch teilweise sinnvoll (wenn gleich es mir lieber wäre, wenn man die Einstellung in Abhängigkeit ob C++/CLI oder normales C++ bekommen würde). Aber unter MSVC6 kann ich mir dies nicht vorstellen (habe aber keins im Zugriff).



  • Danke fuer die Antworten, zu "interface" laesst sich echt einiges ergooglen, bin nun etwas mehr darueber informiert. Das mit der Virtuellen Vererbung faellt mir nun auch wieder ein, stimmt - da war mal was mit Diamantstrukturen in der Vererbung, auch dies laesst sich sehr gut nachlesen und einfachst nachbauen.

    Nur, welchen Sinn es macht extra einen Konstruktor zu deklarieren damit man ihn inlinen kann bleibt mir raetselhaft. Mir ist die Funktionsweise von inline (im Ggs zur "virtuellen Vererbung", anscheinend) einigermassen gut bekannt, dass es eine empfehlung ist, aber den Compiler nicht zum inlinen zwingt, etc. Aber ich dachte, dass solcherlei Optimierungen doch eigentlich von Hause aus gemacht werden, GERADE wenn der Ctor leer steht. Irgendwie scheint mir das eher als aufblaehen des Codes. Oder gibt es irgendeinen rationalen Grund zum inlinen eines leeren Ctors?



  • Fabeltier schrieb:

    Danke fuer die Antworten, zu "interface" laesst sich echt einiges ergooglen, bin nun etwas mehr darueber informiert. Das mit der Virtuellen Vererbung faellt mir nun auch wieder ein, stimmt - da war mal was mit Diamantstrukturen in der Vererbung, auch dies laesst sich sehr gut nachlesen und einfachst nachbauen.

    interface beim VC++ ist das selbe wie struct.
    Und abstract ist zB komplett unbedeutend:
    #define abstract

    Es dient lediglich der besseren "lesbarkeit" - wobei das natuerlich streitpunkt ist.

    Nur, welchen Sinn es macht extra einen Konstruktor zu deklarieren damit man ihn inlinen kann bleibt mir raetselhaft. Mir ist die Funktionsweise von inline (im Ggs zur "virtuellen Vererbung", anscheinend) einigermassen gut bekannt, dass es eine empfehlung ist, aber den Compiler nicht zum inlinen zwingt, etc. Aber ich dachte, dass solcherlei Optimierungen doch eigentlich von Hause aus gemacht werden, GERADE wenn der Ctor leer steht. Irgendwie scheint mir das eher als aufblaehen des Codes. Oder gibt es irgendeinen rationalen Grund zum inlinen eines leeren Ctors?

    das macht garkeinen Sinn was du hier geschrieben hast.
    kannst du versuchen das ganze nochmal neu formuliert zu posten?
    denn inline und virtuelle vererbung haben rein garnichts miteinander zu tun und wie bereits gesagt interface ist das selbe wie struct, bringt also bei vererbung keinen vorteil.



  • @Fabeltier:
    Einen leeren ctor schreibt man am besten garnicht - wozu auch? Damit man sinnlos ein paar Zeilen Code mehr hat, und sich jeder fragt was der leere ctor soll?

    Grund zum expliziten inlinen: einige Compiler können immer noch nicht inlinen wenn der Code nicht in der aktuellen Übersetzungseinheit sichtbar ist.



  • wenn du nen leeren CTor willst, aber auch einen mit Paramtern?



  • JustAnotherNoob schrieb:

    wenn du nen leeren CTor willst, aber auch einen mit Paramtern?

    Was sollte ein leerer CTor mit Parametern bringen...?



  • Shade Of Mine schrieb:

    JustAnotherNoob schrieb:

    wenn du nen leeren CTor willst, aber auch einen mit Paramtern?

    Was sollte ein leerer CTor mit Parametern bringen...?

    nen leeren standard-ctor und einen mit parametern meint er wohl.



  • ja ok, an den fall hatte ich jetzt nicht gedacht -- obwohl das eigentlich garnicht SO selten vorkommt.



  • Shade Of Mine schrieb:

    Und abstract ist zB komplett unbedeutend:
    #define abstract

    Es dient lediglich der besseren "lesbarkeit" - wobei das natuerlich streitpunkt ist.

    Bei mir (MSVC++ 2008 Express) reicht abstract immerhin aus, um den Kompiliervorgang mit der folgenden Fehlermeldung abzubrechen:

    Eine Klasse, die als "abstract" deklariert wurde, kann nicht instanziiert werden.

    Abgeleitete Klassen scheinen dagegen automatisch nicht mehr abstrakt zu sein. Fragwürdige Sache...



  • Nexus schrieb:

    Fragwürdige Sache...

    *Irgendwas von "Microsoft" und "immer ihr eigenes Süppchen kochen" in den Bart brummelt*

    PS.: nein, bitte jetzt keinen Flamewars mit Anti-M$ Parolen und kontra-Anti-M$-Parolen anfangen 😉

    PPS.: nein ich hab keinen Bart. Der ist pur virtuell, quasi abstract 🤡



  • pumuckl schrieb:

    PPS.: nein ich hab keinen Bart. Der ist pur virtuell, quasi abstract 🤡

    Dann dürfte es dich gar nicht geben? 😮 😃



  • Nexus schrieb:

    pumuckl schrieb:

    PPS.: nein ich hab keinen Bart. Der ist pur virtuell, quasi abstract 🤡

    Dann dürfte es dich gar nicht geben? 😮 😃

    Achwo. Bart ist eine Basisklasse für Vollbart, Ziegenbart usw. 🙂
    *SCNR*


Anmelden zum Antworten