Ez milyen C++ szintaktika?
Egy kódban ilyet láttam. Mi a franc ez?
Rectangle::Rectangle():itsWidth(5),itsLength(10){}
Hisz benne van a kódba.Ez egy fix érték a téglalap-nak. Szélesség, és hossza van megadva.
Rectangle::Rectangle():
itsWidth(5),
itsLenght(10)
{}
Ez a Rectangle nevű osztály default konstruktora. A szimpla kettőspont után lehet inicializálni az adatait.
Szintaktika:
osztálynév::metódus(paraméterek) : adattag(érték), ... {}
// rectangle.h
class Rectangle {
private:
__int itsWidth;
__int itsLength;
public:
__Rectangle();
//...
}
// rectangle.cpp
Rectangle::Rectangle() : itsWidth(5), itsLength(10)
{
// vagy másképp:
// itsWidth=5;
// itsLength=10;
}
És hogy miért jobb ez, mint a sima értékadás?
Egyrészt gyorsabban lefut, mert a fordító eleve ezekkel az értékekkel hozza létre az objektumot, nem fut le konkrét értékadó utasítás, másrészt vannak olyan adattagok, amiket csak így lehet inicializálni (pl. const).
Nem ugyanaz, de hasonló, mint a lokális változók inicializálása:
{
int i; // veremmutató állítás
i = 1; // értékadás
}
{
int i = 1; // lefordított kód: "push 1"
}
Majdnem jó, de nem pontos!
Mikor lefoglalod a memóriát, akkor lefoglalódik az attribútum helye is. A lefoglalás pillanatában adott érték az inicializált érték, minden más már "felülírás".
Tehát, ha már { ... } között akarsz az attr.-nak értéket adni, az már felülírás, nem pedig inicializálás!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!