Premenné typu štruktúra
Úvod
* jednoduché premenné: int, float, double, char, bool, TColor ...
* štruktúrované premenné:
o polia
o struct
o objekt grafická plocha TCanvas, objekty pre prácu so súbormi, komponenty.
Zatiaľ sme informácie, ktoré spolu súvisia, ukladali do viacerých premenných. Napríklad:
* súradnice bodov:
int StredX, StredY; ... súradnice stredu grafickej plochy
int x[100], y[100]; ... dvojice x[0], y[0]; x[1], y[1]; ... sú súradnice bodov.
* čitateľ a menovateľ zlomku:
int c, m;
Nevýhoda je, že v programe sú premenné deklarované na rôznych miestach. Program je horšie čitateľný, stráca sa význam premenných a na prvý pohľad nie je jasné, ktoré premenné spolu nejako súvisia. Navyše sa s takýmito premennými zle pracuje (priradenie bodu: x[0]=StredX; y[0]=StredY;). Preto premenné, ktoré spolu súvisia, zapuzdrujeme - "dávame ich dohromady".
Štruktúry
Pre prácu s bodmi zadefinujme nový, vlastný typ TBod:
struct TBod {
int x, y;
};
Kompilátor sme naučili nový typ TBod. Odteraz môžeme deklarovať premenné typu TBod:
TBod b, stred;
Premenná stred je štruktúrovaná premenná. Je zložená z dvoch celočíselných premenných x, y, pričom x, y sú celé čísla.
b
x y
50
10
Priradenie:
b.x=50;
b.y=10;
g->Pixesl[b.x][b.y]=clBlack;
Ak chceme pracovať s niektorou časťou (x alebo y) premennej b, použijeme operátor . (bodka).
Výhodou štruktúrovaných premenných je to, že premenné rovnakého typu môžeme navzájom priraďovať:
b=stred;
Pozor: Ak by sme definovali ďalší typ TBod1, ktorý bude vyzerať rovnako ako TBod, tak nasledovné priradenie nebude možné:
struct TBod1 {
int x,y;
};
TBod1 zzz; // zadeklarujeme premennú typu TBod1
zzz=b; ... chyba! ... pre kompilátor sú typy TBod1 a TBod nekompatibilné
Stále však môžeme vykonať nasledovné, aj keď menej pohodlné, priradenia:
zzz.x=b.x;
zzz.y=b.y;
Pozor 2: Porovnávanie štruktúrovaných premenných nefunguje:
if (b==stred) Caption="ano"; ... chyba!
Premenné musíme porovnať po zložkách:
if (b.x==stred.x && b.y==stred.y) Caption="ano";
C++Builder má definovaný typ TPoint podobne, ako TBod. Ukážka použitia pri kreslení polygónov (každý bod určuje jeden vrchol polygónu):
v 0. 1. 2.
x y