Kezdőoldal » Számítástechnika » Programozás » Hogy működik a statius változó...

Hogy működik a statius változó nem OO-ban?

Figyelt kérdés

Láttam egy példát ahol statikus tagváltozót deklarálnak és inicializálnak egy operator[]-ban.

Ez az a példa:

[link]


É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?


2012. júl. 26. 12:18
 1/1 Pj0tr ***** válasza:

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.

2012. júl. 31. 12:44
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!