class Polygon {
protected:
int width, height;
public:
virtual int area()
{
return 0;
}
};
class Rectangle : public Polygon {
public:
int area()
{
return width * height;
}
};
class Triangle : public Polygon {
public:
int area()
{
return (width * height / 2);
}
};
class RectangleTriangle : public Rectangle, Triangle
{
public:
int area()
{
return (2* 3/ 2);
}
};
int main() {
RectangleTriangle *rect = new RectangleTriangle();
Triangle trgl;
Polygon poly;
return 0;
}
, vtables, , , , vtable, . vtable, . vtable .
0:000> x Win32Sample!RectangleTriangle*table*
00007ff7`81ed3288 Win32Sample!RectangleTriangle::`vftable' = <function> *[2] <-- one for each base class
00007ff7`81ed3278 Win32Sample!RectangleTriangle::`vftable' = <function> *[2] <-- one for each base class
0:000> !heap -srch 00007ff7`81ed3288
_HEAP @ 1e5ed710000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
000001e5ed716620 0006 0000 [00] 000001e5ed716630 00021 - (busy)
Win32Sample!RectangleTriangle::`vftable'
0:000> !heap -srch 00007ff7`81ed3278
_HEAP @ 1e5ed710000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
000001e5ed716620 0006 0000 [00] 000001e5ed716630 00021 - (busy)
Win32Sample!RectangleTriangle::`vftable'
UserPtr - , , , . UserPtr , , , , vtables 000001e5ed716630
0:000> dt Win32Sample!RectangleTriangle 000001e5ed716630
+0x000 __VFN_table : 0x00007ff7`81ed3278
+0x008 width : 0n0
+0x00c height : 0n0
+0x010 __VFN_table : 0x00007ff7`81ed3288
+0x018 width : 0n0
+0x01c height : 0n0
s vtable , !!!