[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

dziedziczenie wirtualne ?

Koniu

5/13/2007 8:02:00 AM

Co oznacza slowo virtual przy dziedziczeniu?
Jak to obrabia kompilator ?

np:

class B: virtual A
{
public:
char b[100]
};
4 Answers

pdemb

5/13/2007 4:16:00 PM

0

Koniu <kooniu@poczta.onet.pl> writes:

> Co oznacza slowo virtual przy dziedziczeniu?

'U?ycie s3owa kluczowego 'virtual' w kontek?cie dziedziczenia nie
pozwala na duplikowanie pól danych klasy, w stosunku do której go
u?yto.', Eugene Kain, 'Od C do C++'

Koniu

5/13/2007 10:31:00 PM

0

Piotr Dembinski napisa3(a):
> Koniu <kooniu@poczta.onet.pl> writes:
>
>> Co oznacza slowo virtual przy dziedziczeniu?
>
> 'U?ycie s3owa kluczowego 'virtual' w kontek?cie dziedziczenia nie
> pozwala na duplikowanie pól danych klasy, w stosunku do której go
> u?yto.', Eugene Kain, 'Od C do C++'

hmm wobec tego mam takie klasy:

class A
{
public:
char a[100];
};

class B:virtual A
{
public:
char a[100];
};

obiekt klasy A zajmuje 100 bajtow
obiekt klasy B zajmuje 204 bajty

wnioski:
tablica a zostala zadeklarowana 2 razy - duplikuje sie tablica
4 bajty poszly na (?) tablice funkcji/skladowych witualnych (?)

natomiast w przypadku
class A
{
public:
char a[100];
};

class B: A
{
public:
char a[100];
};

obiekt klasy A zajmuje 100 bajtow
obiekt klasy B zajmuje 200 bajtow
duplikuje sie.

o co tu chodzi?

PC, windows XP, VC++ 6.0

Marcin 'Qrczak' Kowalczyk

5/13/2007 10:50:00 PM

0

Dnia 13-05-2007, nie o godzinie 10:02 +0200, Koniu napisal(a):

> Co oznacza slowo virtual przy dziedziczeniu?

Jesli B dziedziczy z A, C dziedziczy z A, a D dziedziczy z B i C, to
zeby w obiekcie D byl jeden obiekt A, a nie dwa, B i C musza dziedziczyc
A wirtualnie.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Bogus

5/14/2007 10:13:00 AM

0

Dnia 14-05-2007 o 00:31:06 Koniu <kooniu@poczta.onet.pl> napisaÅ?(a):

> Piotr DembiÅ?ski napisaÅ?(a):
>> Koniu <kooniu@poczta.onet.pl> writes:
>>
>>> Co oznacza slowo virtual przy dziedziczeniu?
>>
>> 'Użycie sÅ?owa kluczowego 'virtual' w kontekÅ?cie dziedziczenia nie
>> pozwala na duplikowanie pól danych klasy, w stosunku do której go
>> użyto.', Eugene Kain, 'Od C do C++'
>
[ciach testy i wnioski]
>
> o co tu chodzi?


O dziedzicenie wielobazowe, z tej samej klasy bazowej.

class A
{
public:
char a[100];
};

class B : public virtual A
{
};

class C : public virtual A
{
};

class D : public B, C
{
};

Rozmiar D jest 100 + 8 bajtów, bo tablica a jest jedna. UsuniÄ?cie
z dowolnej klasy modyfikatora virtual spowoduje, że pole a bÄ?dzie
duplikowane -> rozmiar klasy D wzroÅ?nie dwukrotnie.

--
BoguÅ?
www.google.pl <-- to nie boli
http://bogu...