//===-- sbvalue-cast.cpp ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifdef DO_VIRTUAL_INHERITANCE #define VIRTUAL virtual #else #define VIRTUAL #endif #include 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; }