Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

ups man sollte den codeschnipsel von oben auch einfügen :D


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

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.)

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

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.

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

Stümmt, jetzt wo Du es sagst find ich es auch im draft ;o)

thx

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.