http://www.java2s.com/Code/Cpp/CatalogCpp.htm
Demo progik[]
- CppTomb elemeinek osszeadasa templattel
- Cpp Dijkstra Shortest Path
- Cpp point class
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[]
class Osztaly {
public:
int a,b;
Osztaly(int x, int y):a(x),b(y){}
}