53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| struct CommonBase {
 | |
|   int m_base;
 | |
|   int virt_base_val;
 | |
|   int func_base_val;
 | |
|   virtual int virt_base() { return virt_base_val; }
 | |
|   virtual int virt_common() { return 555; }
 | |
|   int func_base() { return func_base_val; }
 | |
|   int func_common() { return 777; }
 | |
| };
 | |
| 
 | |
| struct Base1 : CommonBase {
 | |
|   int m1 = 22;
 | |
|   Base1() {
 | |
|     // Give the base functions/members unique values.
 | |
|     virt_base_val = 111;
 | |
|     func_base_val = 112;
 | |
|     m_base = 11;
 | |
|   }
 | |
|   virtual int virt1() { return 3; }
 | |
|   int func1() { return 4; }
 | |
| };
 | |
| 
 | |
| struct Base2 : CommonBase {
 | |
|   int m2 = 33;
 | |
|   Base2() {
 | |
|     // Give the base functions/members unique values.
 | |
|     virt_base_val = 121;
 | |
|     func_base_val = 122;
 | |
|     m_base = 12;
 | |
|   }
 | |
|   virtual int virt2() { return 5; }
 | |
|   int func2() { return 6; }
 | |
| };
 | |
| 
 | |
| struct FinalClass : Base1, Base2 {
 | |
|   int m_final = 44;
 | |
|   virtual int final_virt() { return 7; }
 | |
|   int final_func() { return 8; }
 | |
|   virtual int virt_common() { return 444; }
 | |
|   int func_common() { return 888; }
 | |
| };
 | |
| 
 | |
| int main() {
 | |
|   FinalClass C;
 | |
|   // Call functions so they get emitted.
 | |
|   C.func1();
 | |
|   C.func2();
 | |
|   C.final_func();
 | |
|   C.func_common();
 | |
|   C.Base1::func_base();
 | |
|   return 0; // break here
 | |
| }
 |