Übersicht über Memberfunktionen

Memberfunktionen sind entweder statisch oder nicht statisch. Das Verhalten statischer Memberfunktionen unterscheidet sich von anderen Memberfunktionen, da statische Memberfunktionen kein implizites this Argument aufweisen. Nicht statische Memberfunktionen weisen einen this Zeiger auf. Memberfunktionen können, ob statisch oder nicht statisch, entweder inner- oder außerhalb der Klassendeklaration definiert werden.

Wenn eine Memberfunktion innerhalb einer Klassendeklaration definiert ist, wird sie als Inlinefunktion behandelt, und es ist nicht erforderlich, den Funktionsnamen mit dem Klassennamen zu qualifizieren. Obwohl innerhalb von Klassendeklarationen definierte Funktionen bereits als Inlinefunktionen behandelt werden, können Sie den inline Schlüsselwort (keyword) verwenden, um Code zu dokumentieren.

Ein Beispiel des Deklarierens einer Funktion innerhalb einer Klassendeklaration folgt:

// overview_of_member_functions1.cpp
class Account
{
public:
    // Declare the member function Deposit within the declaration
    //  of class Account.
    double Deposit( double HowMuch )
    {
        balance += HowMuch;
        return balance;
    }
private:
    double balance;
};

int main()
{
}

Wenn sich die Definition einer Memberfunktion außerhalb der Klassendeklaration befindet, wird sie nur dann als Inlinefunktion behandelt, wenn sie explizit als inlinedeklariert wird. Darüber hinaus muss der Funktionsname in der Definition mit dem Klassennamen mithilfe des Bereichsauflösungsoperators (::) qualifiziert sein.

Das folgende Beispiel ist mit der vorherigen Deklaration der Klasse Account identisch, mit der Ausnahme, dass die Funktion Deposit außerhalb der Klassendeklaration definiert ist:

// overview_of_member_functions2.cpp
class Account
{
public:
    // Declare the member function Deposit but do not define it.
    double Deposit( double HowMuch );
private:
    double balance;
};

inline double Account::Deposit( double HowMuch )
{
    balance += HowMuch;
    return balance;
}

int main()
{
}

Hinweis

Obwohl Memberfunktionen entweder innerhalb einer Klassendeklaration definiert werden können oder getrennt, können keine Memberfunktionen einer Klasse hinzugefügt werden, nachdem die Klasse definiert ist.

Die Klassen, die Memberfunktionen enthalten, können viele Deklarationen haben, aber die Memberfunktionen selbst dürfen nur eine Definition in einem Programm haben. Mehrfache Definitionen verursachen zur Verknüpfungszeit eine Fehlermeldung. Wenn eine Klasse Inlinefunktionsdefinitionen enthält, müssen die Funktionsdefinitionen identisch sein, um dieser ODR (one definition rule) zu entsprechen.