1 #include <stdio.h>
2 #include <stdint.h>
3
4 class A
5 {
6 public:
A()7 A () : m_pad ('c') {}
8
~A()9 virtual ~A () {}
10
a()11 virtual const char * a()
12 {
13 return __PRETTY_FUNCTION__;
14 }
15
b()16 virtual const char * b()
17 {
18 return __PRETTY_FUNCTION__;
19 }
20
c()21 virtual const char * c()
22 {
23 return __PRETTY_FUNCTION__;
24 }
25 protected:
26 char m_pad;
27 };
28
29 class AA
30 {
31 public:
AA()32 AA () : m_pad('A') {}
~AA()33 virtual ~AA () {}
34
aa()35 virtual const char * aa()
36 {
37 return __PRETTY_FUNCTION__;
38 }
39
40 protected:
41 char m_pad;
42 };
43
44 class B : virtual public A, public AA
45 {
46 public:
B()47 B () : m_pad ('c') {}
48
~B()49 virtual ~B () {}
50
a()51 virtual const char * a()
52 {
53 return __PRETTY_FUNCTION__;
54 }
55
b()56 virtual const char * b()
57 {
58 return __PRETTY_FUNCTION__;
59 }
60 protected:
61 char m_pad;
62 };
63
64 class C : public B, virtual public A
65 {
66 public:
C()67 C () : m_pad ('c') {}
68
~C()69 virtual ~C () {}
70
a()71 virtual const char * a()
72 {
73 return __PRETTY_FUNCTION__;
74 }
75 protected:
76 char m_pad;
77 };
78
main(int argc,char const * argv[],char const * envp[])79 int main (int argc, char const *argv[], char const *envp[])
80 {
81 A *a_as_A = new A();
82 B *b_as_B = new B();
83 A *b_as_A = b_as_B;
84 C *c_as_C = new C();
85 A *c_as_A = c_as_C;
86
87 // Set first breakpoint here.
88 // then evaluate:
89 // expression a_as_A->a()
90 // expression a_as_A->b()
91 // expression a_as_A->c()
92 // expression b_as_A->a()
93 // expression b_as_A->b()
94 // expression b_as_A->c()
95 // expression b_as_B->aa()
96 // expression c_as_A->a()
97 // expression c_as_A->b()
98 // expression c_as_A->c()
99 // expression c_as_C->aa()
100 printf ("a_as_A->a() = '%s'\n", a_as_A->a());
101 printf ("a_as_A->b() = '%s'\n", a_as_A->b());
102 printf ("a_as_A->c() = '%s'\n", a_as_A->c());
103 printf ("b_as_A->a() = '%s'\n", b_as_A->a());
104 printf ("b_as_A->b() = '%s'\n", b_as_A->b());
105 printf ("b_as_A->c() = '%s'\n", b_as_A->c());
106 printf ("b_as_B->aa() = '%s'\n", b_as_B->aa());
107 printf ("c_as_A->a() = '%s'\n", c_as_A->a());
108 printf ("c_as_A->b() = '%s'\n", c_as_A->b());
109 printf ("c_as_A->c() = '%s'\n", c_as_A->c());
110 printf ("c_as_C->aa() = '%s'\n", c_as_C->aa());
111 return 0;
112 }
113