Prohlášení a definice (C++)
Prohlášení kompilátor zjistit, zda existuje program prvku nebo název.Definice určit, jaké kódu nebo dat. název popisuje.Název musí být deklarován před použitím.
Prohlášení
Prohlášení obsahuje jeden nebo více názvů do programu.Prohlášení může vyskytnout více než jednou v programu.Proto výčet tříd struktur, typy a uživatelem definované typy lze deklarovat pro každou jednotku kompilace.Toto prohlášení více omezení je, že všechny deklarace musí být shodné.Prohlášení rovněž slouží jako definice, kromě případů, kdy prohlášení:
Je-li funkce prototypu (funkce prohlášení u subjektu žádné funkce).
Obsahuje extern specifikátor, ale žádné inicializátor (objekty a proměnné) nebo těle funkce (funkcí).To označuje, že definice není nutně aktuální jednotka překlad a dává navázání externí název.
Je členem statická data uvnitř deklarace třídy.
Protože členy statických tříd dat proměnných samostatná sdílené všemi objekty třídy, musí být definovány a inicializován mimo deklaraci třídy.(Další informace o třídy a členy tříd viz třídy.)
Je například název deklarace třídy s žádnou definici následující class T;.
Je typedef prohlášení.
Prohlášení, které jsou také definice jsou například:
// 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;
};
Některé prohlášení, které nejsou definice jsou:
extern int i;
char *strchr( const char *Str, const char Target );
Definice
Definice je jedinečný specifikace objektu nebo proměnné, funkce, třídy nebo výčet.Protože definice musí být jedinečný, program může obsahovat pouze jednu definici pro daný program prvek.Může být: 1 korespondence mezi prohlášeními a definice.Existují dva případy, ve kterých lze program prvek deklarované a není definován:
Funkce je deklarována, ale nikdy odkazováno pomocí volání funkce nebo výraz, který má adresu funkce.
Třída se používá pouze způsobem, který nevyžaduje znám jeho definice.Však musí být použita deklarace třídy.Následující kód ilustruje v takovém případě:
// definitions.cpp class WindowCounter; // Forward reference; no definition class Window { // Definition of WindowCounter not required static WindowCounter windowCounter; }; int main() { }