Udostępnij za pośrednictwem


Przegląd funkcji członkowskich

Funkcje składowe są statyczne lub niestatyczne. Zachowanie statycznych funkcji składowych różni się od innych funkcji składowych, ponieważ statyczne funkcje składowe nie mają niejawnego this argumentu. Funkcje niestatycznych składowych mają this wskaźnik. Funkcje członkowskie, zarówno statyczne, jak i niestatyczne, można zdefiniować w obrębie lub poza deklaracją klasy.

Jeśli funkcję składową zdefiniowano w obrębie deklaracji klasy, jest ona traktowana jak funkcja śródwierszowa i nie ma potrzeby kwalifikowania nazwy funkcji za pomocą nazwy klasy. Chociaż funkcje zdefiniowane wewnątrz deklaracji klas są już traktowane jako funkcje wbudowane, można użyć słowa kluczowego inline do dokumentowania kodu.

Przykład deklarowania funkcji w obrębie deklaracji klasy:

// 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()
{
}

Jeśli definicja funkcji składowej znajduje się poza deklaracją klasy, jest traktowana jako funkcja śródliniowa tylko wtedy, gdy jest jawnie zadeklarowana jako inline. Ponadto, nazwa funkcji w definicji musi być kwalifikowana odpowiednią nazwą klasy za pomocą operatora rozpoznawania zakresu (::).

Poniższy przykład jest identyczny z poprzednią deklaracją klasy Account, z wyjątkiem tego, że funkcja Deposit jest zdefiniowana poza deklaracją klasy:

// 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()
{
}

Uwaga

Funkcje składowe można zdefiniować w obrębie deklaracji klasy lub oddzielnie, funkcji składowych nie można dodać do klasy po jej zdefiniowaniu.

Klasy zawierające funkcje składowe mogą mieć wiele deklaracji, ale same funkcje składowe mogą mieć tylko jedną definicję w programie. Wiele definicji powoduje wyświetlenie komunikatu o błędzie w czasie połączenia. Jeśli klasa zawiera definicje funkcji śródwierszowej, definicje funkcji muszą być identyczne, aby przestrzegać zasady „jednej definicji”.