Deklaracje i definicje

Jak do tej pory znasz już podstawowe typy danych, jakie oferuje język C++. Wiesz także, jak w swoim programie umieszczać dosłowne wartości stałe, które są obiektami i mają swój typ. Takie obiekty nie mają jednak nazw, więc da się je użyć tylko w miejscu, gdzie są wpisane w kod. Nie da się odwołać do nich z innego miejsca programu. Teraz to się zmieni. Dowiesz się, jak w swoich programach tworzyć nowe obiekty i nadawać im nazwy.

Deklaracje obiektów

Wyobraź sobie przez chwilę, że jesteś kompilatorem :-) Tłumacząc program na kod maszynowy napotykasz w nim takie oto wyrażenie:

a / b

Widzisz więc tutaj znak dzielenia, a po obu jego stronach stoją nazwy: a i b. Co oznaczają te nazwy? Czy odnoszą się do obiektów? Jeśli tak, to czy te obiekty przechowują jakieś wartości, które dałoby się podzielić? Jeśli tak, to czy wykonać dzielenie całkowite, czy zmiennoprzecinkowe? Żeby kompilator mógł wygenerować kod maszynowy dla takiego wyrażenia, musi to wszystko wiedzieć. Te informacje dostarczają mu właśnie deklaracje.

Deklaracja przedstawia kompilatorowi nową nazwę. Gdy zadeklarujesz w programie nazwę, to kompilator od tego momentu będzie ją już znał i nie będzie zdziwiony, gdy nagle gdzieś w programie odwołasz się do tej nazwy. Dodatkowo deklaracja mówi kompilatorowi, jaki typ danych jest powiązany z tą nazwą. Dzięki temu po napotkaniu tej nazwy w jakimś wyrażeniu kompilator już wie, jakiego typu wartości może się spodziewać i co może z nią zrobić.

Zobacz teraz, jak mogłaby wyglądać deklaracja nazwy a:

int a;

Jak widzisz, jest tutaj nazwa typu, a po niej nazwa, którą chcesz przedstawić kompilatorowi. Całość zakończona jest średnikiem.

I tu uwaga! Nie każda deklaracja jest instrukcją, jednak niektóre deklaracje są instrukcjami i można umieszczać je w tych samych miejscach, w których wolno umieszczać instrukcje. Twórcy języka C++ postanowili, że takie deklaracje też będą się kończyć średnikiem, tak jak inne instrukcje.

Niektóre deklaracje nie są instrukcjami, dzięki czemu można je umieszczać w każdym miejscu programu, nawet na zewnątrz funkcji :-> Omówię takie przypadki dokładniej już za moment :-)

Taką deklarację można odczytać jako: "Od tej chwili a oznacza obiekt, który może przechowywać liczby całkowite." Podobnie możesz zadeklarować nazwę b:

float b;

i kompilator dowie się z tego, że "od tej chwili b oznacza obiekt, który może przechowywać liczby zmiennoprzecinkowe." Wiedząc to wszystko nie będzie już miał żadnych wątpliwości, gdy napotka gdzieś w kodzie wyrażenie a / b ;-) Liczbę całkowitą można przecież podzielić przez liczbę zmiennoprzecinkową :-) a skoro jeden ze składników jest zmiennoprzecinkowy, to trzeba wykonać dzielenie zmiennoprzecinkowe ;-)

Deklaracje kontra definicje

Deklaracje takie, jak te powyżej, są przy okazji definicjami. Definicja jest wtedy, gdy kompilator ma już pełną informację o deklarowanej nazwie. W przypadku obiektu definicja jest wtedy, gdy zna już dokładną budowę obiektu i jego rozmiar w pamięci, bo wtedy może już rezerwować dla niego pamięć. Tak właśnie było w powyższych przypadkach: wiadomo dokładnie, ile miejsca w pamięci zajmą obiekty typu int czy float, więc kompilator może spokojnie zarezerwować dla nich pamięć [mówiąc dokładniej: może Ci od razu utworzyć te obiekty ;-)].

Bla bla bla yadda yadda yadda...


Subskrybcja

Buttony
Pomagał GIMP Powered by NAVI GameCreator GameCreator GameCreator