W poniższym kodzie są z książki "Inside C++ modelu obiektowego"pytania o C++ dziedziczenia wirtualnego
#include <iostream>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
int main()
{
cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
return 0;
}
w moim komputerze (Windows VS2010), wyjście jest:
Here're moje pytania
1, sizeof (x) = 1
książka powiedzieć s gdy typ X generuje dwie instancje, na przykład xa i xb. kompilacja wstawi bajt do A, aby xa i xb mogły mieć inny adres. Nie do końca rozumiem powody.
2 sizeof (T) = 4
Stosując wirtualny spadku, będziemy mieli dodatkowy wirtualny wskaźnik? Wydaje mi się, że może to być odmienne od wirtualnego wskaźnika w polimorfizmie. Czy ktoś może mi podać układ pamięci dla Y?
Dziękujemy!
Jedno pytanie na pytanie proszę –
na pierwsze pytanie, sprawdź: http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an- object-of-an-empty-class? rq = 1 –
Myślę, że twoje główne pytanie jest takie, że ponieważ Y używa wirtualnego dziedziczenia do wyprowadzenia z nie-polimorficznej klasy X, a Y samo w sobie nie jest polimorficzne, to samo dziedziczenie samo spowoduje Y mieć v-table, więc jego rozmiar to 4 .. – CashCow