10. Struktúrák

Default book

Gyakran szükségünk lehet olyan adatszerkezetre, amikor az összetartozó adatok nem azonos típusúak, azonban egyszerre akarjuk valamiképpen kezelni őket. Például egy embernek tárolni akarjuk a nevét (string), anyja nevét (string), a születésének évét (szám), testmagasságát (szám), nemét (igen/nem), stb... Ilyenkor célszerűen jó lenne egy ember  nevére egy változóval hivatkozni és az embert leíró tulajdonságokat egyesével elérni. (Adatbázis kezelés esetén például egy tábla egy rekordjáról beszélünk ilyenkor).

A struktúra létrehozása az alábbi:

struct ember
{
     string nev;
     string anyjaneve;
     int szukev;
     int testmagassag;
     boolean nem;
}

A fenti kódot célszerű a Main() fölé elhelyezni a kódban.

A láthatósággal kapcsolatban:

A struktúra tagok elé public jellemzőt kell írni, ha a program bármelyik részéből szeretnénk elérni. Ekkor helyesen így néz ki a fenti kód:

struct ember
{
     public string nev;
     public string anyjaneve;
     public int szukev;
     public int testmagassag;
     public boolean nem;
}

Ekkor már a main() függvényben el tudjuk érni a struktúra definícióját és tudunk értékeket is adni az egyes adattagoknak. A public és más módosítók jelentését az Objektum Orientált Programozásnál fogjuk megtárgyalni.

Ha létrehoztunk egy ember nevű struktúrát, akkor ez egy összetett adattípus, amelynek értéket az alábbi módon adhatunk.

ember Pista = new ember();

A Pista nevű változó tulajdonságait egyesével tudjuk megadni. Ha létrehozunk egy másik, ugyanolyan struktúra típussal rendelkező változót, akkor a változók egymás között átadhatják az értéküket. A változók minden eleme (tulajdonsága) átkerül a másik változóba.

Pista.nev = "Kis Pista";
Pista.nem = True;
Pista.szulev = 1999;

// értékadás
ember Pista2 = new ember();
Pista2 = Pista;

Console.WriteLine(Pista2.szulev);

 Struktúrákból is lehet tömböket készíteni:

int n = 10;
ember[] emberek = new ember[n];
...
for(int i=0; i< n; i++){
    Console.WriteLine(ember[i].szulev); //kiírja az emberek születési éveit...
}