73 lines · cpp
1#ifdef DO_VIRTUAL_INHERITANCE2#define VIRTUAL virtual3#else4#define VIRTUAL 5#endif6 7#include <stdio.h>8 9class Base10{11public:12 Base(int val) : m_base_val (val) {}13 virtual ~Base() {}14 15 virtual void16 forcast(int input) {17 int future_val = m_base_val + input * 1;18 printf("Forcasting %d\n", future_val);19 }20 21protected:22 int m_base_val;23};24 25class DerivedA : public VIRTUAL Base26{27public:28 DerivedA(int val) : Base(val*2), m_a_val(val) {29 printf("DerivedA::ctor()->\n");30 printf("m_base_val=%d\n", m_base_val);31 printf("m_a_val=%d\n", m_a_val);32 }33 virtual ~DerivedA() {}34 35private:36 int m_a_val;37};38 39class DerivedB : public VIRTUAL Base40{41public:42 DerivedB(int val) : Base(val), m_b_val(val*3) {43 printf("DerivedB::ctor()->\n");44 printf("m_base_val=%d\n", m_base_val);45 printf("m_b_val=%d\n", m_b_val);46 }47 virtual ~DerivedB() {}48 49 virtual void50 forcast(int input) {51 int future_val = m_b_val + input * 2;52 printf("Forcasting %d\n", future_val);53 }54 55private:56 int m_b_val;57};58 59int60main(int argc, char **argv)61{62 DerivedA* dA = new DerivedA(10);63 DerivedB* dB = new DerivedB(12);64 Base *array[2] = {dA, dB};65 Base *teller = NULL;66 for (int i = 0; i < 2; ++i) {67 teller = array[i];68 teller->forcast(i); // Set breakpoint here.69 }70 71 return 0;72}73