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