| //===-- 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 <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; |
| } |