KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am "playing" with virtual inheritance in C++, and I want to know how a class object is laid out. I have those three classes: class A { private: int a; public: A() {this->a = 47;} virtual void setInt(int x) {this->a = x;} virtual int getInt() {return this->a;} ~A() {this->a = 0;} }; class B { private: int b; public: B() {b = 48;} virtual void setInt(int x) {this->b = x;} virtual int getInt() {return this->b;} ~B() {b = 0;} }; class C : public A, public B { private: int c; public: C() {c = 49;} virtual void setInt(int x) {this->c = x;} virtual int getInt() {return this->c;} ~C() {c = 0;} }; (I think they are correct :p) I used -fdump-class-hierarchy with g++, and I got this Vtable for A A::_ZTV1A: 4u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1A) 16 A::setInt 24 A::getInt Class A size=16 align=8 base size=12 base align=8 A (0x10209fb60) 0 vptr=((& A::_ZTV1A) + 16u) Vtable for B B::_ZTV1B: 4u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1B) 16 B::setInt 24 B::getInt Class B size=16 align=8 base size=12 base align=8 B (0x1020eb230) 0 vptr=((& B::_ZTV1B) + 16u) Vtable for C C::_ZTV1C: 8u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1C) 16 C::setInt 24 C::getInt 32 (int (*)(...))-0x00000000000000010 40 (int (*)(...))(& _ZTI1C) 48 C::_ZThn16_N1C6setIntEi 56 C::_ZThn16_N1C6getIntEv Class C size=32 align=8 base size=32 base align=8 C (0x1020f5080) 0 vptr=((& C::_ZTV1C) + 16u) A (0x1020ebd90) 0 primary-for C (0x1020f5080) B (0x1020ebe00) 16 vptr=((& C::_ZTV1C) + 48u) Now what the heck are those (int (*)(...))-0x00000000000000010 and C::_ZThn16_N1C6setIntEi and (int (*)(...))0 ?? Can someone explain the dump? Thank you.
Tags (comma-separated)
Save Edits
Cancel