Unterschied zwischen Header-Datei und "class"
-
oberschlingel
- Beiträge: 85
- Registriert: 11. April 2006 09:25
- Wohnort: Berlin
Unterschied zwischen Header-Datei und "class"
Eine (vermutlich sehr doofe) Frage:
Was ist der Unterschied, wenn ich in meiner Header-Datei #include <QButton> schreibe, oder class QButton; ?
Danke!
Was ist der Unterschied, wenn ich in meiner Header-Datei #include <QButton> schreibe, oder class QButton; ?
Danke!
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Beispiel, eine Header Datei wird öfters included, dann brauchst du jedes Mal die Abhängigkeit der Header in jeder der Dateien. D.H. der Compiler ließt die Datei und kopiert diese in das Objekt. Wenn du den Header nicht includest, wird Sie auch nicht hin einkopiert. Gut, es ist durchaus noch ein wenig komplexer, aber für eine allgemeine Beurteilung sollte der Satz genügen.
Die Vorwärtsdeklaration funktioniert nur mit Pointern. Bei Referenzen kann man diese nicht verwenden.
Die Vorwärtsdeklaration funktioniert nur mit Pointern. Bei Referenzen kann man diese nicht verwenden.
Ach so hast das gemeint. Ok, wo siehst du dabei einen Vorteil?FlorianBecker hat geschrieben:Beispiel, eine Header Datei wird öfters included, dann brauchst du jedes Mal die Abhängigkeit der Header in jeder der Dateien. D.H. der Compiler ließt die Datei und kopiert diese in das Objekt. Wenn du den Header nicht includest, wird Sie auch nicht hin einkopiert. Gut, es ist durchaus noch ein wenig komplexer, aber für eine allgemeine Beurteilung sollte der Satz genügen.
Was hat unser "class QButton" aus dem Beispiel hier bitte mit Pointern, oder Referenzen zutun?FlorianBecker hat geschrieben: Die Vorwärtsdeklaration funktioniert nur mit Pointern. Bei Referenzen kann man diese nicht verwenden.
...oder anders gesagt, erklaer bitte mal, was du unter Vorwaertsdeklaration verstehst.
Goos
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Also eigentlich weiß ich nicht, ob du aus Langeweile fragst, oder es wirklich nicht weißt.
Der Vorteil besteht darin, dass du diese Header nicht in den Objekten hältst, damit auf unterschiedlichen Compilern Zeit und Platz sparst.
Was das mit Pointer und Referenzen zu tun hat?
QButton *btnEins;
hier kannst du class QButton verwenden
QButton btnEins;
hier musst du den Header verwenden.
Der Vorteil besteht darin, dass du diese Header nicht in den Objekten hältst, damit auf unterschiedlichen Compilern Zeit und Platz sparst.
Was das mit Pointer und Referenzen zu tun hat?
QButton *btnEins;
hier kannst du class QButton verwenden
QButton btnEins;
hier musst du den Header verwenden.
-
oberschlingel
- Beiträge: 85
- Registriert: 11. April 2006 09:25
- Wohnort: Berlin
Darf ich dann nochmal dumm fragen:
Wann verwende ich
und wann
?
Wann verwende ich
Code: Alles auswählen
QButton *btnEins;Code: Alles auswählen
QButton btnEins;?
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Ok, erwischtFlorianBecker hat geschrieben:Also eigentlich weiß ich nicht, ob du aus Langeweile fragst, oder es wirklich nicht weißt.
Ein bissl Langeweile war auch dabei.
Ansonsten find ichs schoen, wenn das hier mal wieder jemand liest und dann auch verstehen kann was da genau abgeht.
Warum also nicht n bissl drueber reden?
Ein weiterer Vorteil waer vielleicht noch, dass man Header-in-Header Konstrukte und damit verbundene Probleme vermeidet.FlorianBecker hat geschrieben: Der Vorteil besteht darin, dass du diese Header nicht in den Objekten hältst, damit auf unterschiedlichen Compilern Zeit und Platz sparst.
Das Beispiel is soweit ja richtig, aber es funktioniert trotzdem mit Pointern und Referenzen.FlorianBecker hat geschrieben: Was das mit Pointer und Referenzen zu tun hat?
QButton *btnEins;
hier kannst du class QButton verwenden
QButton btnEins;
hier musst du den Header verwenden.
Es geht also sowohl ein
QButton *btnEins;
als auch ein
void myFunc(QButton&);
aber kein
QButton btnEins;
Goos
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Bist du Dir da sicher? Soweit ich mich bei kdelibs4 dran errinnern kann (ich habe es derzeit aufgegeben kdelib4 mit msvc zu kompilieren...) mag das der MSVC nicht -> der folgende HeaderGoos hat geschrieben: void myFunc(QButton&);
Code: Alles auswählen
class myTempClass;
void doSomething(myTempClass &cls);
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Jo, dass das ganze in Bezug auf MSVC und Templates nicht so wirklich funktioniert ist bekannt. Weiss ich zumindest von MSVC 6. Wie es in spaeteren Versionen ausschaut kann ich nicht sagen.Christian81 hat geschrieben:gibt mit MSVC einen Compilerfehler (denke ich)Code: Alles auswählen
class myTempClass; void doSomething(myTempClass &cls);
Deshalb sollte man das ganze wohl eher nicht auf Templates anwenden.
Ansonsten ist das mit den Referenzen aber kein Problem.
Goos
Gut .... mit class begreife ich wie es einigermasse geht... (von php .. )
aber wie kann ich so eine class anwenden?
ich weiss das die argumente ausgetausch werden ( der name ++ meine C biebel) ... und der compiler macht fuer jeden type eine version was er im c code findet wo noetig ist.. ... sei es Qtsring char ecc.... aber in der praxis?
aber wie kann ich so eine class anwenden?
Code: Alles auswählen
template <class X> void swapargs(X &a, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Schau Dich doch in Qt um - dort gibt es massenweise Template-Klassen (QList, QVector, QMap, QHash, ...)patrik08 hat geschrieben:ich weiss das die argumente ausgetausch werden ( der name ++ meine C biebel) ... und der compiler macht fuer jeden type eine version was er im c code findet wo noetig ist.. ... sei es Qtsring char ecc.... aber in der praxis?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung