73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| #ifdef DO_VIRTUAL_INHERITANCE
 | |
| #define VIRTUAL virtual
 | |
| #else
 | |
| #define VIRTUAL 
 | |
| #endif
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| class Base
 | |
| {
 | |
| public:
 | |
|     Base(int val) : m_base_val (val) {}
 | |
|     virtual ~Base() {}
 | |
| 
 | |
|     virtual void
 | |
|     forcast(int input) {
 | |
|         int future_val = m_base_val + input * 1;
 | |
|         printf("Forcasting %d\n", future_val);
 | |
|     }
 | |
| 
 | |
| protected:
 | |
|     int m_base_val;
 | |
| };
 | |
| 
 | |
| class DerivedA : public VIRTUAL Base
 | |
| {
 | |
| public:
 | |
|     DerivedA(int val) : Base(val*2), m_a_val(val) {
 | |
|         printf("DerivedA::ctor()->\n");
 | |
|         printf("m_base_val=%d\n", m_base_val);
 | |
|         printf("m_a_val=%d\n", m_a_val);
 | |
|     }
 | |
|     virtual ~DerivedA() {}
 | |
| 
 | |
| private:
 | |
|     int m_a_val;
 | |
| };
 | |
| 
 | |
| class DerivedB : public VIRTUAL Base
 | |
| {
 | |
| public:
 | |
|     DerivedB(int val) : Base(val), m_b_val(val*3) {
 | |
|         printf("DerivedB::ctor()->\n");
 | |
|         printf("m_base_val=%d\n", m_base_val);
 | |
|         printf("m_b_val=%d\n", m_b_val);
 | |
|     }
 | |
|     virtual ~DerivedB() {}
 | |
|     
 | |
|     virtual void
 | |
|     forcast(int input) {
 | |
|         int future_val = m_b_val + input * 2;
 | |
|         printf("Forcasting %d\n", future_val);
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     int m_b_val;
 | |
| };
 | |
| 
 | |
| int
 | |
| main(int argc, char **argv)
 | |
| {
 | |
| 	DerivedA* dA = new DerivedA(10);
 | |
| 	DerivedB* dB = new DerivedB(12);
 | |
| 	Base *array[2] = {dA, dB};
 | |
|     Base *teller = NULL;
 | |
|     for (int i = 0; i < 2; ++i) {
 | |
|         teller = array[i];
 | |
|         teller->forcast(i); // Set breakpoint here.
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 |