• Nem Talált Eredményt

Alkalmazott modul: Programozás

N/A
N/A
Protected

Academic year: 2023

Ossza meg "Alkalmazott modul: Programozás"

Copied!
18
0
0

Teljes szövegt

(1)

Alkalmazott modul: Programozás

5. Gyakorlat

(2)

Típusok

• Mi az adattípus?

▫ Értékhalmaz és művelethalmaz összessége

• Értékhalmaz

▫ Típusban szereplő adatok

▫ Általában rekorddal megvalósított

• Művelethalmaz

▫ Az adatszerkezeten értelmezett műveletek

▫ Függvényekkel és eljárásokkal megvalósított

(3)

Típusok

• Beépítve kétféle típus található meg

▫ Elemi, vagy primitív típusok

Egyszerűbb típusok, mint pl.: int

▫ Összetett típusok

Típuskonstrukciók segítségével létrehozott típusok

Primitív típusokból építkezve

• A beépített típusokon felül van lehetetőség saját típus létrehozásá

(4)

Típusok - típuskonstrukciók

• 3 fajta konstrukció létezik

▫ Iterált, vagy sorozat

Azonos típusú sorozatok előállítására

Tömbbel megvalósított általában

▫ Unió

Ritkán használt

Nehézkes

▫ Direktszorzat

Gyakran használt

Saját típusok megvalósításának alapvető eszköze

Rekorddal megvalósított

(5)

Rekord

• Különböző típusú adatok gyűjteménye

• Közös, összetett értéket alkot

• A vele létrehozott típus rendelkezik értékhalmazzal

▫ Művelethalmaz is rendelhető hozzá

• A rekordba helyezett értéket nevezzük adattagnak, vagy mezőnek

▫ Rekorddal együtt jönnek létre

▫ Külön módosíthatók és lekérdezhetők

(6)

Rekord

C++ megvalósítás

struct <név>

{ <típus> <azonosító>;

<típus_2> <azonosító_2>;

// … };

Függvényeken kívül kell deklarálni őket

FONTOS: a végén pontosvesszőt kell rakni!

Rekord típusai lehetnek

▫ Beépített típusok

▫ Saját típusok

▫ tömbök

(7)

Rekord

• Deklaráció után saját típusként lehet használni:

<rekord_nev> <azonosító>;

• Az adattagokat

▫ módosíthatjuk

▫ lekérdezhetjük az értékeiket

▫ <azonosító>.<tag>

• Tömböket is létre lehet hozni:

▫ <rekord_nev> <azonosító>[<méret>];

<azonosító>[<index>].<tag>;

(8)

Feladat

1. Készítsétek el az Employee rekordot.

Tartalmazza a munkahelyre belépés dátumát, illetve a fizetését, és a nevét. A belépés dátuma a Date saját típus legyen. Ez tartalmazza az

évet, hónapot, és a napot.

A főprogramban töltsetek fel egy 5 elemű tömböt Employeekkal, és legyen lehetőség lekérdezni egy adott napon belépett emberek neveit.

(9)

Művelethalmaz

• Rekord adattagjai jelentik az értékhalmazt

• Saját típushoz szükség van még a művelethalmazra is

• Művelethalmaz olyan alprogramok, ahol

▫ deklarációban szerepel az adott típus

visszatérési értékként, vagy paraméterként

• Tetszőleges számú művelet írható

(10)

Feladat

2. Saját típus létrehozása: Hozzátok létre a polinom típust, ahol a polinomot a fokával és az

együtthatókat tartalmazó tömbbel reprezentáljuk.

Valósítsátok meg hozzá az alábbi műveleteket:

a) Összeadás b) Kivonás c) Beolvasás d) Kíírás

e) Helyettesítési érték

f) Adott fokszámú együttható lekérdezése g) Szorzás

(11)

Operátorok

• C++ biztosítja, hogy saját típusainkhoz operátorokat készítsünk

▫ Standard módon hívhatóak meg

▫ Működésüket mi határozzuk meg

▫ Függvényként adjuk meg őket

▫ Függvénynév operator<jel> pl.: operator-

▫ Paraméterek száma és visszatérési érték megléte kötött

▫ Paraméterek és visszatérési érték típusa szabad

(12)

Operátorok

• Felüldefiniálható operátorok

▫ 1 paraméteresek

-, +, ++, --

!

▫ 2 paraméteresek

Első paraméter a balérték, a második a jobbérték

+, -, *, /, %

||, &&, ^, &, |

+=, -=, *=, /=

<, >, <=, >=, !=, ==

<<, >>

(13)

Operátorok - Példa

• Complex osztályra kivonás:

Complex operator-(Complex lv, Complex rv) { Complex res;

res.re = lv.re – rv.re;

res.im = lv.im – rv.im;

return res;

}

Complex c1, c2, c3;

// értékek beállítása c1 = c2 – c3;

(14)

Operátorok

• Lehetőség van túlterhelésre ahogy egy egyszerű alprogramnál is

▫ Lehetőség van különböző típusok közötti műveletekre

• A kétparaméteres alprogramoknál a paraméterek a megadás sorrendjének megfelelően helyettesítődnek be

▫ Következemény: kommutatív műveletek esetén

mind a két oldalra meg kell külön írni az operátort

(15)

Operátorok

Lehetőség van adatátviteli operátorok (<<,>>) létrehozására is

Speciális paraméterezést igényelnek

▫ Meg kell kapni az adatfolyamot, amin a műveletet el kell végezni

▫ Meg kell kapni az adatot, amin végezzük a műveletet

▫ Visszatérési érték szintén adatfolyam

▫ Az adatfolyam lehet

Bemeneti: istream

Kimeneti: ostream

Cím szerinti paraméterátadás kell!

(16)

Konstruktorok

• Rekordok létrehozásánál az adattagok beállítása hosszú és körülményes lehet

• Egyszerűbb módszer, ha írunk egy beállító függvényt, ami minden értéket megad

• Még jobb megoldás: konstruktor művelet használata

▫ Egy változó létrehozásakor automatikusan meghívódik

▫ Több félét is készíthetünk

(17)

Konstruktorok

• A rekord belsejében kell definiálni a változók mellett

• Tetszőleges paraméterei lehetnek és túl is terhelhetjük

• Inicializálja az adattagokat

• Automatikusan meghívódik

• Neve kötelezően meg kell, hogy egyezzen a rekord nevével és nem írunk le visszatérési értéket

(18)

Konstruktorok

struct Complex { int re;

int im;

Complex() { re = 1; im = 1; } Complex( int re_, int im_) {

re = re_;

im = im_;

};

Complex c1; // nulla paraméteres konstruktor hívódik meg

Complex c2(1,2); // két paraméteres konstruktor hívódik meg, ha jók a típusok

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

somni törzs anyagcsere-ujjlenyomata alapján készített törzsfán, az azonos állományokból származó szarvasmarha- és juh eredet Ħ törzsek azonos és a törzsfán külön