8fff62ce9123a359139ee0fa48989816.ppt
- Количество слайдов: 15
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus tömbök, névterek
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Paraméter átadás Ø Paramétereket három féle módon adhatunk át függvényeknek: Ø Érték szerint (C…) Ø Változó (vagy objektum) címének átadásával (C…) Ø Referencia alapján (C++, Java…)
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Érték szerinti paraméter átadás Ø A változó vagy objektum értéke lemásolódik a verembe a függvény hívásakor. Ø A függvény belsejében nem az eredeti változóval vagy objektummal dolgozunk. Ø A függvény végén ezek a változók vagy objektumok felszabadulnak.
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Érték szerinti paraméter átadás Ø példa void function( int a ) { a++; } int main( int argc, char** argv ) { int a = 5; function( a ); std: : cout << a << std: : endl; }
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Pointer (cím) átadása Ø A változó vagy objektum nem másolódik le. Ø A függvény belsejében az eredeti változóval vagy objektummal dolgozunk. Ø A függvény végén nem szabadulnak fel. Ø Gyakorlatilag egy pointert állítunk a változóra és a pointeren keresztül érjük azt el.
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Pointer (cím) átadása Ø példa void function( int* a ) { (*a)++; } int main( int argc, char** argv ) { int a = 5; function( &a ); std: : cout << a << std: : endl; }
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Referencia Ø A pointerek nehézkes használata miatt a C++-ban bevezették a referencia típust. Ø Nagyon hasonló a pointerhez, de referenciánál nem kell képezni a változó címét, közvetlen a változóra mutat rá. Ø Nem kell gondolkodni, hogy most a pointer címét akarjuk vagy a pointer által mutatott változót, stb… Ø Megszorítás: referenciát a létrehozáskor inicializálni kell! Nem lehet belőle tömböt képezni! Ø Referencia képzése (&): int a = 5; int& b = a;
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Referencia Ø Nagyon hasonló, mint a cím szerinti paraméter átadás. Ø A C++ nem tesz különbséget referencia és pointer paraméter között, ezért nem tehető meg, hogy ugyanolyan névvel létrehozunk kettő függvényt, úgy, hogy az egyik paramétere egy pointer a másiké egy referencia.
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Referencia Ø példa void ref_function( int& a ) { a++; } int main( int argc, char** argv ) { int a = 5; function( a ); std: : cout << a << std: : endl; }
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Dinamikus tömbök Ø Dinamikus tömböknek memóriát new-val kell lefoglalni. int* array = new int[ size ]; Ø Saját osztálynál: One. Parameter* object = new One. Parameter[size]; Ø Azonban ez csak olyan osztályoknál működik, ahol van default konstruktor.
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Delete[ ] Ø Tömböket a delete[] operátorral töröljük. Ø delete[] array; Ø delete[] object;
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Névterek - namespace Ø Egy függvény vagy osztály írásakor könnyen előfordulhat, hogy az általunk választott név ütközik egy meglévővel. Ø A névterek felhasználásával a különböző definíciók névhierarchiába szervezhetőek. Így akár logikai csoportosítás is elérhető. Ø Névterekkel tetszőleges mélységű névtér hierarchia alakítható ki. Ø Megkezdett névtér folytatható, akár külön másik forrás file-ban. Ø Azonos névtérben nem lehet két egyforma definíció (osztály, függvény, változó).
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Névterek - namespace Ø Névtér létrehozása: namespace Math { class Multiple{}; } namespace House { class Door{}; class Wall{}; }
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Névterek elérése Ø Névterek elérési útja programozható. Ø Névtér feloldó operátor (scope operátor) : : Ø Példa: std: : cout Ø Teljes elérési útvonalat meg kell adni, ha az elérni kívánt tag több névtérbe van ágyazva: House: : Room: : Bed bed;
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Névterek elérése Ø Ahhoz, hogy minden hivatkozáskor ne kelljen megadni a teljes elérési útvonalat, „használni” kell a névteret: using namespace Math; Multiple mult; using namespace House: : Room; Bed beg; using namespace std;