programozás ii

21
UNIVERSITY OF SZEGED Department of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 3. Gyakorlat C++ alapok

Upload: sherry

Post on 19-Jan-2016

39 views

Category:

Documents


1 download

DESCRIPTION

Programozás II. 3. Gyakorlat C++ alapok. I/O műveletek. #include C-s megfelelője: stdio.h Alapvető input/output műveleteket tartalmazza cout Alapértelmezett kimenetre írhatunk vele stream (bájtok sorozata), melyeket

TRANSCRIPT

Page 1: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Programozás II.

3. GyakorlatC++ alapok

Page 2: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

I/O műveletek

#include <iostream>• C-s megfelelője: stdio.h

• Alapvető input/output műveleteket tartalmazza

cout• Alapértelmezett kimenetre írhatunk vele

• stream (bájtok sorozata), melyeket << operátorral „köthetünk össze”

• cout << ”Hello World” << „!”;

Page 3: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

I/O műveletek

cerr• Alapértelmezett hibakimenetre írhatunk vele.

• cout-hoz hasonló működés:

• cerr << „Hiba” << „…”;

cin• Alapértelmezett bementről olvas, változó típusának

megfelelő értéket

• >> operátorral használható, akár több beolvasásra is:int x, y;cin >> x >> y;

Page 4: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

C, C++ főbb különbségei

C++ objektumorientált

Névterek (namespace)• Programjainkat, főleg nagyobb rendszerek

esetében ún. névterekbe rendezhetjük.

• Hierarchikus tárolási mód, névtéren belül is létrehozható névtér.

• using parancs segítségével kijelölhető, mely névtere(ke)t szeretnénk használni.

• Pl.: using namespace std; vagy std::cout;

(részletek előadáson)

Page 5: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

C, C++ főbb különbségei Default paraméterek

• Függvények paramétereinek alapértelmezett értéket is adhatunk.

• Ezeknek a paramétereknek a paraméterlista hátulján kell lenniük!

• Ha kevesebb paraméterrel hívjuk a függvényt, az alapértelmezettek megkapják az előre beállított értéket.

int Nagyobb (int a, int b = 0) { if (a < b) return b;

else return a;}

int x = nagyobb (2, 3); // x = 3

int y = nagyobb (2); // y = 2, ugyanez lenne: nagyobb(2, 0)

Page 6: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

C, C++ főbb különbségei Egysoros comment

• C-ben csak több soros comment létezett: /* … */

• C++-ban bevezették az egysoros commentet: //comment

Ciklusváltozó inicializálása• C-ben a for ciklusban használt változókat előre inicializálni

kellett.

• C++-ban lehetséges a for cikluson belül inicializálni:for ( int i=0; i < 10; i ++ ) {

// blokk}

• Ez a változó csak a for ciklus blokkjában létezik.

Page 7: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

C, C++ főbb különbségei

bool típus• C-ben 0 = false, true = minden más

• C++-ban létezik bool típus, mely true/false értéket vehet fel

bool igaz = true; //értéke: 1

bool hamis = false; //értéke: 0

További különbségek előadáson…

Page 8: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Osztály létrehozása

class kulcsszóval definiáljuk az osztályt utána az osztály nevét kell megadni { } – blokkban definiáljuk az osztály adattagjait,

függvényeit, stb… Fontos, hogy az osztályt egy ; jel zárja! Példa:

class SimpleClass {//…

};

Page 9: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Láthatóságok

Az osztályok adattagjainak és függvényeinek kívülről való elérhetőségét szabályozhatjuk.

private: ez az alapértelmezett láthatóság. Csak osztályon belül hivatkozhatunk rá

protected: osztályon belül, és származtatott osztályokból érhető el

public: bárhonnan elérhető Láthatóság megadása: megadjuk a láthatóságot, majd

egy kettőspont (:) karaktert teszünk. Minden tag, amit ez után definiálunk, ezt a láthatóságot fogja megkapni.

Page 10: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Láthatóságok Példa:

class SimpleClass {

private:

int a;

public:

int b;

int c;

protected:

int d;

};

Page 11: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Konstruktor A konstruktor az a speciális metódus, amely az osztály

példányosításánál hívódik meg. Alapesetben itt adhatunk értéket az adattagjainknak, dinamikus változóinknak itt foglalhatunk helyet, stb.

Nevének meg kell egyezzen az osztály nevével. Nem lehet visszatérési értéke. Egy osztály rendelkezhet több konstruktorral is, de azoknak

különbözniük kell paraméter listában. A paraméter nélküli konstruktort default konstruktornak nevezzük. Ha az osztálynak nincs konstruktora, akkor a fordító

automatikusan létrehoz egy defualt-ot.

Page 12: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Konstruktor Példa:

class OneParameter {

private:

int m_iParameter;

public:

OneParameter() { //default

m_iParameter = 0;

}

OneParameter( int a ) { //paraméteres

m_iParameter = a;

}

};

Page 13: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Destruktor Speciális függvény, mely az objektum törlésénél hívódik meg.

Általában ide teszik a memória felszabadító, file lezáró, stb kódokat.

Neve megegyezik az osztály nevével, plusz a neve elé kell tenni egy ~ jelet.

Nem lehet visszatérési értéke és paramétere!

Page 14: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Destruktor Példa:

class OneParameter {

private:

int m_iParameter;

public:

OneParameter() { //default konstruktor

m_iParameter = 0;

}

OneParameter( int a ) { //paraméteres konstruktor

m_iParameter = a;

}

~OneParameter() { //destruktor

//Üres blokk, nincs dinamikusan foglalt erőforrásunk melyet fel kellene szabadítani

}

};

Page 15: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Destruktor Példa:

class OneParameter {

private:

int m_iParameter;

public:

OneParameter() { //default konstruktor

m_iParameter = 0;

}

OneParameter( int a ) { //paraméteres konstruktor

m_iParameter = a;

}

~OneParameter() { //destruktor

//Üres blokk, nincs dinamikusan foglalt erőforrásunk melyet fel kellene szabadítani

}

};

Page 16: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

this pointer Az aktuális objektumra mutató pointer. Mivel pointer, ezért a -> operátorral kell hivatkozni az adattagokra

és metódusokra. Jó példa használatára, mikor egy függvény paraméter listájában

egy változónak a neve megegyezik egy member adattag nevével, ilyenkor a thisel tudunk különbséget tenni.

Page 17: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

this pointer Példa:

class OneParameter {

private:

int a;

public:

OneParameter( int a ) { //paraméteres konstruktor

this->a = a; /*paraméter neve megegyezik egy osztályon belüli változó nevével. Ekkor a this pointer egyértelműsíti, melyiket szeretnénk használni*/

}

};

Page 18: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Objektum példányosítás Objektumot hozhatunk létre a stack-en és a heap-en is. Ha a stack-en hozzuk létre, akkor élettartalma az aktuális blokk

végéig tart, memória felszabadítása automatikus. Ha a heap-en hozzuk létre, akkor az élettartalma addig tart,

ameddig a programozó ki nem törli. Ebben az esetben egy pointerrel mutatunk az objektumra.

Page 19: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Objektum példányosítás Stack-en, default konstruktorral:

• OneParameter first;

Stack-en, paraméteres konstrukorral:

• OneParameter second( 2 );

Heap-en, default konstruktorral:

• OneParameter* third = new OneParameter;

Heap-en, paraméteres konstrukorral:

• OneParameter* fourth = new OneParameter( 2 );

Page 20: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Delete Amit new-val lefoglaltunk, azt delete-vel ki is kell törölni (nincs

GarbageCollector, mint Java-ban). példa:

• delete third;

• delete fourth;

Page 21: Programozás II

UN

IVER

SIT

Y O

F SZ

EG

ED

Dep

artm

ent o

f Sof

twar

e E

ngin

eeri

ng

UN

IVE

RS

ITA

S S

CIE

NT

IAR

UM

SZ

EG

ED

IEN

SIS

Forrás és header fájl Az osztályok definíciós részének nem kellene (szabadna)

implementációs részt tartalmazniuk (átláthatóság,kereskedelem), ezért a definíciót és az implementációt érdemes külön forrás file-okban tárolni.

Ún. header fájlokban (valami.h) tároljuk osztályunk tagjainak definícióit

Az implementációt egy másik fájlban (valami.cpp) írjuk meg Példa: vector osztály