korea1 Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 hi, kann mir jmd von euch erklären, worin der techn. unterschied liegt, wenn ich eine methode innerhalb einer klasse oder außerhalb einer klasse definiere. und wann ist es sinnvoll methoden innerhalb einer klasse zu definieren. danke korea1 Zitieren
Guybrush Threepwood Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Das macht so wiet ich weiß keinen technischen Unterschied. Mann macht das nur wegen der Übersichtlichkeit oder zum Schutz des Quellcodes. Du könntest z.b. eine Klasse in einer Headerdatei deklarieren und Ihre Methoden in einer Dll definieren. So könnten andere diese Klasse benutzen, würden aber nicht sehen wie du sie programmiert hast. Gruß Guybrush Zitieren
nic_power Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Hallo, Methoden gehören eigentlich immer zu einer Klasse, von daher verstehe ich nicht den Unterschied zwischen "innerhalb" und "ausserhalb". Oder bezieht sich die Frage auf die Implementierung direkt im class Konstrukt (Header-File) vs. Implementierung in einer eigenen Datei/C++-File? Nic Zitieren
korea1 Geschrieben 4. Juli 2003 Autor Geschrieben 4. Juli 2003 ups man sollte den codeschnipsel von oben auch einfügen class goofy { protected: int st[100]; int t; public: goofy(){t = 0;}; void drauf(int x) {st[++t] = x;} int runter(void){return st[t--];} }; [/PHP] die frage kam von unserem lehrer und siehe codeschnipsel oben, damit ist gemeint innerhalb der klasse und außerhalb würde lt. ihm so aussehen: [PHP] class fahrzeug{ private: int wert; protected: fahrzeug(); void wert_eingeben (void) ~fahrzeug(); }; fahrzeug::fahrzeug(void) { // Konstruktor } void fahrzeug::daten_eingeben(void) { cout << "wert eingeben:"; cin >> wert; } fahrzeug::~fahrzeug(void) { // Destruktor } ist das jetzt verständlich? jetzt wurden die methoden außerhalb der klasse definiert. das alles befindet sich aber nach wie vor in einem headerfile. korea1 Zitieren
Knuddlbaer Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Technisch macht es wohl keinen Unterschied. Es ist einfach Übersichtlicher da man in der Deklaration der Klasse leichter einen Überblick findet. Hinzu kommen die punkte die bereits genannt wurden, der eigentliche Code kann bei Trennung in libs obj dll oder sonstwo gehalten werden. (Ausnahme sind templates, hier muß der Compiler die Definition zur Compilezeit kennen.) Zitieren
Orffi Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Hallo! Funktionen, die in der Klassendefinition definiert werden, werden, wenn möglich, als inline übersetzt. Stichwort inline: An den Stellen, wo die Funktion aufgerufen wird, wird kein Funktionsaufruf gemacht, sondern der Compiler schreibt den Code der Funktion gleich dorthin. Man spart sich die Kosten für den Funktionsaufruf. Interessant für Erbsenzähler :-) und Funktionen die in einer Schleife immer wieder aufgerufen werden. Stichwort "wenn möglich": Die Funktion darf nicht zu komplex sein. Wenn die Funktion zum Beispiel eine for-Schleife enthält, wird sie nicht als inline expandiert. HTH Jan Zitieren
Knuddlbaer Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Der Compiler darf sie erst inline machen wenn er dazu angewiesen wird ?! Aber recht haste, wenn sie inline ist muß sie wie die templates in jeder UE bekannt sein. Zitieren
Orffi Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Wenn ich die Funktion in der Klassendefinition definiere, wie ich oben schrieb, darf der Compiler (der Compiler interessiert mich wie immer nicht, sondern nur der Standard) das. Bis denn dann Jan Zitieren
Knuddlbaer Geschrieben 4. Juli 2003 Geschrieben 4. Juli 2003 Stümmt, jetzt wo Du es sagst find ich es auch im draft ;o) thx Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.