Veröffentlicht 4. Juli 200322 j 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
4. Juli 200322 j 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
4. Juli 200322 j 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
4. Juli 200322 j 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
4. Juli 200322 j 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.)
4. Juli 200322 j 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
4. Juli 200322 j 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.
4. Juli 200322 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.