Hogy működik a statius változó nem OO-ban?
Láttam egy példát ahol statikus tagváltozót deklarálnak és inicializálnak egy operator[]-ban.
Ez az a példa:
És van ez a rész benne:
// Subscript operator for IntVector.
int& IntVector::operator[]( int nSubscript ) {
static int iErr = -1;
if( nSubscript >= 0 && nSubscript < _iUpperBound )
return _iElements[nSubscript];
else {
clog << "Array bounds violation." << endl;
return iErr;
}
}
ha a feltétel hamis akkor vissza adja az iErrt ami a statikus változó értéke a -1.
És ha lefordítsuk akkor látjuk,hogy mégsem -1 adott vissza miért van ez?
Ha a staticot elhagyom a deklarációból akkor pedig a -1 adja vissza,static esetén ez miért van máshogy?
Na remek én sem olvastam, csak gondolkodtam. Alatta le van írva.
A lényeg, hogy referenciát ad vissza az operátor nem pedig értéket. (Egy memóriablokk címét)
A függvényen belül a static annyit csinál, hogy mindig azt a memóriablokkot tartja foglalva a függvény iErr változója számára, tehát a második - kiolvasási - körben, ugyanazt a memóriacímet adja vissza a return _iErr hatására mint első körben. Csakhogy az első körben erre a címre v[10] = 10 utasítás beírta a 10-et.
Mivel úgy van inicializálva a változó, hogy static int iErr = -1; ezért ez csak egyszer fut le az értékadás, a függvény első hívásakor.
Ha kicseréled erre: static int iErr; iErr = -1; akkor mindig -1et fog visszaadni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!