Programovanie v jazyku C++

Dátové typy


Odvodené dátové typy

Zo základných dátových typov je možné vytvoriť odvodené dátové typy pomocou nasledujúcich operátorov:
 
* smerník
& referencia
[ ] vektor
() funkcia

Jednoduchý príklad:

  int *a;
  float v[10];
  char* p[20];
  void f(int);
  struct str{short dlzka; char *p };
Problémy pri dekódovaní komplikovanejších odvodených dátových typov vyplývajú hlavne zo skutpčnosti, že * a & sú prefixové operátory a [ ] a ( ) sú postfixové operátory, pritom pri typoch, pri ktorých je priorita operátorov kritická, musia byť použité zátvorky. Pretože operátor [ ] má vyššiu prioritu ako ( ), platí:
  int* v[10];     // vektor zo smernikov
  int (*p)[10];   // smernik na vektor
Jednoduchým spôsobom, ako dekódovať deklaráciu odvodeného dátového typu je, začať od mena a podľa priority operátorov sa presúvať zľava do prava a naopak, pričom je treba rešpektovať zmeny priority zátvorkami. Poslednú deklaráciu dekódujeme takto:
  p            - meno
  *p           - smerník
  (*p)         - zmena priority
  (*p)[10]     - smerník na pole 10 prvkov
  int (*p)[10] - smerník na pole 10 prvkov typu int
Väčšina ľudí si jednoducho pamätá, ako vyzerajú najčastejšie používané deklarácie dátových typov. Pokiaľ sa ale chcete stať svetovým preborníkom v dekódovaní dátových typov, doporučujem Vám skúsiť Cvičenie 0101.

Niekedy môže byť dosť zdĺhavé, vypisovať pre každý dátový typ jednotlivé deklarácie, zvlĺášť vtedy, ak typy sú identické. V základných dátových typoch sme videli takúto formy deklarácie premenných:

  int x, y;        // ekvivalent pre int x;  int y;
Pri odvodených dátových typoch je treba postupovať veľmi opatrne. Operátory totiž pôsobia len na jednotlivé mená, nie na iné mená v tej istej deklarácii:
  int *p, y;       // ekvivalent pre int* p; int y; NIE int* y; 
  int x, *p;       // int x; int *p; 
  int v[10], *p;   // int v[10]; int *p;
 Je zrejmé, že používanie takýchto konštrukcií môže spôsobiť veľa príjemných chvíl strávených za klávesnicou počítača.