Was ist eine Vorwärtsdeklaration?
-
Ich verzweifel bald!
In all meinen Büchern wird von Vorwärtsdeklaration gesprochen, aber nie erklärt, was genau das sein soll. Auch im Internet finde ich nichts passendes.
Könnt ihr mir helfen?
Was soll das sein?
Danke.
-
Damit dürfte in den meisten Fällen eine Klassendeklaration gemeint sein:
class Klasse; // ich kann jetzt mit Klasse einiges machen: Klasse *p; // Zeiger deklarieren Klasse &r; // Referenzen deklarieren Klasse funktion(); // Funktionen mit Klasse als Rückgabetyp deklarieren // aber vieles nicht: Klasse k; // keine Objekte erstellen p->methode(); // keine Methoden aufrufen sizeof(Klasse) // geht auch nicht
Der Sinn ist, dass man für viele Verwendungen eines Klassentyps nicht die volle Klassendefinition braucht und so durch Einsatz einer "Vorwärtsdeklaration" (das ist ein umgangssprachlicher Begriff) #includes und einigen damit verbundenen Ärger sparen kann.
-
Wenn Du eine eigene Header-Datei schreibst und dort (wie oben gezeigt) die Klasse
Klasse
verwendest, die in der HeaderdateiKlasse.h
definiert ist, müsstest Du diese eigentlich mit#include "Klasse.h"
einbinden.Wenn Du aber in Deiner Header-Datei
Klasse
nur wie oben gezeigt verwendest, reicht es aus, dem Compiler mitzuteilen, dass esKlasse
gibt. Er braucht nicht zu wissen, wie groß die Objekte von Klasse wirklich sind (er braucht ja nur z.B. einen Pointer, und der hat immer die gleiche (plattformabhängige) Größe) und auch keine Methoden zu wissen (die werden dann erst in Deiner *.cpp-Datei benötigt.Der Punkt ist: Wenn nun Deine Header-Datei wiederum von einer anderen (dritten) Klasse verwendet wird, müsste der Compiler beim Bauen dieser anderen Objektdatei zunächst Deine Headerdatei einlesen, und durch das
#include
auch die DateiKlasse.h
. Bei einer Vorwärtsdeklaration bleibt ihm das erspart. Noch wichtiger: Die dritte Klasse bleibt unabhängig vonKlasse
, da sie diese direkt gar nicht nutzt.Je größer und komplexer das Projekt wird, desto mehr verhindert man dadurch unnötige Abhängigkeiten und reduziert nebenbei die Compilezeit.
-
Laienhaft ausgedrückt, sagt sie aus:
"Es gibt meine Bezeichnung jetzt, ihr könnt mich also adressieren, aber wie ich aufgebaut bin und benutzt werde verrate ich erst später!"#include <stdio.h> void print(); main(){ print(); } void print(){ printf("Hello world!"); }
-
Youka schrieb:
Laienhaft ausgedrückt, sagt sie aus:
"Es gibt meine Bezeichnung jetzt, ihr könnt mich also adressieren, aber wie ich aufgebaut bin und benutzt werde verrate ich erst später!"#include <stdio.h> void print(); main(){ print(); } void print(){ printf("Hello world!"); }
Das war vermutlich C? Nee, nichtmal.
-
Gibt es auch eine Rückwärtsdeklaration?
-
bboobb schrieb:
Gibt es auch eine Rückwärtsdeklaration?
Alter Übersetzungsfehler, es sollte eigentlich Vorausdeklaration heißen.
-
Vielen, vielen Dank.
Ihr helft wirklich klasse.