Kona Wikia
Register
Advertisement

http://www.java2s.com/Code/Cpp/CatalogCpp.htm

Demo progik[]

Castok[]

  • static_cast<type> - tipus biztos
  • dinamyc_cast<type> - classokra
  • const_cast<type> -
  • reinterpret_cast<type> - nem biztonsagos

Design Patterns[]

Cuccok[]

Referencia változók[]

A C++-ban a C-hez képest egy teljesen új típuscsoport is megjelent, melyet referencia típusnak hívunk. Ezen típus segítségével referencia változókat hozhatunk létre. Definíciószerűen a referencia egy alternatív név egy memóriaobjektum (változó) eléréséhez. Ha bármikor kétségeink vannak egy referencia értelmezésével kapcsolatban, akkor ehhez a definícióhoz kell visszatérnünk. Egy X típusú változó referenciáját X& típussal hozhatjuk létre. Ha egy ilyen referenciát explicit módon definiálunk, akkor azt kötelező inicializálni is, hiszen a referencia valaminek a helyettesítő neve, tehát meg kell mondani, hogy mi az a valami.

Tekintsük a következő néhány soros programot:

   int	v = 1;
   int&	r = v;	// kötelezô inicializálni
   int	x = r;  // x = 1
   r = 2;  	// v = 2

Mivel az r a v változó helyettesítő neve, az int& r = v; sor után bárhol ahol a v-t használjuk, használhatnánk az r-et is, illetve az r változó helyett a v-t is igénybe vehetnénk. A referencia típus implementációját tekintve egy konstans mutató, amely a műveletekben speciális módon vesz részt.

A referencia típus javasolt felhasználása nem is ez, hanem elsősorban a C-ben hiányzó cím (azaz referencia) szerinti paraméter átadás megvalósítása. Nézzük meg példaként az egész változókat inkrementáló (incr) függvény C és C++-beli implementációját. Mivel C-ben az átadott paramétert a függvény nem változtathatja meg (érték szerinti átadás), kénytelenek vagyunk a változó helyett annak címét átadni melynek következtében a függvény törzse a járulékos indirekció miatt jelentősen elbonyolódik. Másrészt, ezek után az incr függvény meghívásakor a címképző operátor (&) véletlen elhagyása Damoklész kardjaként fog a fejünk felett lebegni.

C-ben C++-ban
void incr( int * a ) {
   (*a)++; //"a" az "x" címe
}
 ...  
int x = 2; 
incr( &x );
void incr( int& a ) {
   a++;  //"a" az "x" 
         //helyettesítô neve 
}
...  
int x = 2;
incr( x );  // Nincs &

Konstruktor dolgok[]

Member initialization[]

[1]

class Osztaly {
public:
   int a,b;
   Osztaly(int x, int y):a(x),b(y){}
}
Advertisement