CannibalSmith ([info]cannibalsmith) rakstīja [info]koderi kopienā,
@ 2007-11-21 09:51:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
C++ mantošana un aritmētika
Base x;
Derived y;
x = y;
Vai pareizi saprotu, ka uz x tiek kopēta tikai y Base daļa?


(Ierakstīt jaunu komentāru)


[info]bubu
2007-11-21 11:51 (saite)
Nepareizi saproti. C++'ā klašu aizņemtā atmiņa baitu līmenī netiek tā vienkārši kopēta. Tie izsaukts copy-konstruktors vai arī piešķiršanas-operators.
x = y;
rindiņu kompilators pārveidos uz:
x.operator = (y);

T.i. tiks izsaukta
Base::operator = (const Base&)
metode. Šī metode, ja vien pats neesi to implementējis, vienmēr ir defaultā uzģenerēta. Defaultā implementācija izsauc šādu operator = visiem klases memberiem pēc kārta (gan POD, gan ne-POD tipiem).

(Atbildēt uz šo) (Diskusija)


[info]cannibalsmith
2007-11-21 12:05 (saite)
Tu nupat pateici "jā" ļoti sarežģītā veidā. :) Izsauksies Base kopijas konstruktors, kam caur Base& refereci būs pieejami tikai objekta y no Base klases mantotie locekļi.

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


(Anonīms)
2007-11-21 17:55 (saite)
Nekāds "jā". Bet labāk programmē kādā citā valodā ;)

(Atbildēt uz šo) (Iepriekšējais)


[info]bubu
2007-11-21 13:21 (saite)
Nu es sapratu, ka tu prasi, vai tiks kopēta atmiņa pa tiešo (vārds kopēt tavā tekstā), kas nav tiesa. Jo padodot caur referenci nekas nekopēsies.

(Atbildēt uz šo)


Neesi iežurnalējies. Iežurnalēties?