verwendete symbole vordefinieren?
-
also, ich hab mich mal durch quellcode durchgelesen, um mal etwas mit der sprache an sich vertrauter zu werden.
der author des qcs hatte 2 header dateien geschrieben:
eine, in der er die klasse matrix, und eine, in der er die klasse vector definierte.die header datei matrix muss in einigen fällen auf die klasse vector zugreifen, und hat deshalb ganz oben folgende zeile stehen:
//verwendete symbole vordefinieren class Vector;
ich wollte nur mal wissen, was diese zeile genau bewirkt,und wann man sie einsetzen sollte
-
das ist eine Vorwärtsdeklaration und bewirkt, dass der Compiler weiß, dass es eine Klasse namens "Vektor" gibt. Damit kannst du Referenzen und Zeiger auf Objekte dieser Klasse erstellen, ohne dass die gesamte klassendefinition bekannt sein muss. d.h.
class Foo; class Bar { public: Bar (Foo &); }; //irgendwo.cc #include "Bar.h" #include "Foo.h" //um auch alle memberfunktionen der klasse Foo zu benutzen, muss aber die gesamte klassendefinition erreichbar sein. Bar::Bar (Foo &f) { f.foo(); } //ginge rein mit Vorwärtsdeklaration nicht.
Außerdem darfst du so Funktionen im Voraus deklarieren, ohne ständig eine vollständige Klassendeklaration im Rücken zu haben:
class Vector; Vector foo (Vector);
Wenn du allerdings Vector und seine Memberfunktionen wirklich verwenden willst, muss der Compiler die komplette Definition von Vector sehen.
Mit solchen Vorwärtsdeklarationen ersparst du dir also eine Menge Abhängigkeiten und kannst auch oft Compilezeiten extrem kürzen. Nebenbei sind manche Sachen ohne Vorwärtsdeklaration nicht zu lösen.
-
Die Anweisung sagt das eine Klasse Vector existiert.
Wenn du z.B. Pointer auf die Klasse anlegen willst, aber die Definition an der Stelle noch nicht schreiben kannst.
-
Damit sagt man dem Compiler:
Es gibt hier einen Klassentyp namens Vector, woraus er sich genau zusammensetzt sage ich dir später(Deklaration),was seine Member-Funktionen tuen noch später(Definition).
Das sagt man dem Compiler immer dann,wenn man trotzdem an dieser Stelle schon Pointer auf Vector erstellen möchte.Er erlaubt es dann, da ein Pointer immer gleich gross ist, unabhängig von der Zusammensetzung der Klasse.
-
hm, hätt nie gedacht, dass die zeile genau das gleiche bedeuted,wie bei funktionen, nunja, damit hats sich erledigt,danke euch dreien.