1 | struct CommonBase { |
2 | int m_base; |
3 | int virt_base_val; |
4 | int func_base_val; |
5 | virtual int virt_base() { return virt_base_val; } |
6 | virtual int virt_common() { return 555; } |
7 | int func_base() { return func_base_val; } |
8 | int func_common() { return 777; } |
9 | }; |
10 | |
11 | struct Base1 : CommonBase { |
12 | int m1 = 22; |
13 | Base1() { |
14 | // Give the base functions/members unique values. |
15 | virt_base_val = 111; |
16 | func_base_val = 112; |
17 | m_base = 11; |
18 | } |
19 | virtual int virt1() { return 3; } |
20 | int func1() { return 4; } |
21 | }; |
22 | |
23 | struct Base2 : CommonBase { |
24 | int m2 = 33; |
25 | Base2() { |
26 | // Give the base functions/members unique values. |
27 | virt_base_val = 121; |
28 | func_base_val = 122; |
29 | m_base = 12; |
30 | } |
31 | virtual int virt2() { return 5; } |
32 | int func2() { return 6; } |
33 | }; |
34 | |
35 | struct FinalClass : Base1, Base2 { |
36 | int m_final = 44; |
37 | virtual int final_virt() { return 7; } |
38 | int final_func() { return 8; } |
39 | virtual int virt_common() { return 444; } |
40 | int func_common() { return 888; } |
41 | }; |
42 | |
43 | int main() { |
44 | FinalClass C; |
45 | // Call functions so they get emitted. |
46 | C.func1(); |
47 | C.func2(); |
48 | C.final_func(); |
49 | C.func_common(); |
50 | C.Base1::func_base(); |
51 | return 0; // break here |
52 | } |
53 | |