Deklaracje i definicje (C++)
Deklaracje mówią kompilatorowi o istnieniu elementu programu lub nazwy,Definicje określają, jaki kod lub dane opisuje nazwa.Nazwa musi być zadeklarowana, zanim będzie można jej użyć.
Deklaracje
Deklaracja wprowadza do programu co najmniej jedną nazwę.Deklaracje mogą występować w programie więcej niż raz.Z tego powodu, klasy, struktury, typy wyliczeniowe i inne typy zdefiniowane przez użytkownika mogą być deklarowane dla każdej jednostki kompilacji.Ograniczeniem dla wielu deklaracji jest to, że wszystkie muszą być identyczne.Deklaracje służą również jako definicje, z wyjątkiem sytuacji, gdy deklaracja:
Jest prototypem funkcji (deklaracją funkcji bez treści funkcji).
Zawiera specyfikator extern, ale nie inicjator (obiekty lub zmienne) lub treść funkcji (funkcje).Oznacza to, że definicja niekoniecznie znajduje się w bieżącej jednostce tłumaczenia i daje zewnętrzne powiązanie nazwy.
Jest statycznym elementem członkowskim danych wewnątrz deklaracji klasy.
Ponieważ statyczne elementy członkowskie danych klasy są zmiennymi dyskretnymi współużytkowanymi przez wiele obiektów klasy, muszą być one zdefiniowane i zainicjowane na zewnątrz deklaracji klasy. (Aby uzyskać więcej informacji dotyczących klas i elementów członkowskich klasy, zobacz Klasy).
Jest deklaracją nazwy klasy bez następującej po niej definicji, jak class T;.
Jest instrukcją typedef.
Przykłady deklaracji, które są również definicjami:
// Declare and define int variables i and j.
int i;
int j = 10;
// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };
// Declare class CheckBox.
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};
Niektóre deklaracje, które nie są definicjami:
extern int i;
char *strchr( const char *Str, const char Target );
Definicje
Definicja jest unikatową specyfikacją obiektu, zmiennej, funkcji, klasy lub wyliczenia.Ponieważ definicje muszą być unikatowe, program może zawierać tylko jedną definicję danego elementu.Między deklaracjami i definicjami może istnieć związek wiele do jednego.Istnieją dwa przypadki, w których element programu może być deklarowany, ale nie musi być definiowany:
Funkcja jest deklarowana, ale nigdy nie następuje do niej odwołanie za pomocą wywołania funkcji albo wyrażenia, które przyjmuje adres funkcji.
Klasa jest używana tylko w sposób, który nie wymaga, aby znana była jej definicja.Jednakże, klasa musi zostać zadeklarowana.Poniższy kod ilustruje taki przypadek:
// definitions.cpp class WindowCounter; // Forward reference; no definition class Window { // Definition of WindowCounter not required static WindowCounter windowCounter; }; int main() { }