Unklarheit mit Schluesselwoertern in C++
-
Das mit
interfacehat 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
MyClassist 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 einclass MyClass abstractsieht.
-
Nexus schrieb:
Das mit
interfacehat mich kürzlich auch gerade gewundert, auch weil es ebenfalls vom Syntaxhighlighting betroffen istUnter 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 abstractEs 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 abstractEs dient lediglich der besseren "lesbarkeit" - wobei das natuerlich streitpunkt ist.
Bei mir (MSVC++ 2008 Express) reicht
abstractimmerhin 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*