1*dd5d7300SPavel Labath #include "a.h" 2*dd5d7300SPavel Labath 3*dd5d7300SPavel Labath void A::doSomething(A &anotherA) { 4*dd5d7300SPavel Labath printf("In A %p doing something with %d.\n", this, m_a_value); 5*dd5d7300SPavel Labath int tmp_value = anotherA.Value(); 6*dd5d7300SPavel Labath printf("Also have another A at %p: %d.\n", &anotherA, tmp_value); // Break here in doSomething. 7*dd5d7300SPavel Labath } 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht class Extra 1099451b44SJordan Rupprecht { 1199451b44SJordan Rupprecht public: 1299451b44SJordan Rupprecht Extra (int in_one, int in_two) : m_extra_one(in_one), m_extra_two(in_two) {} 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht private: 1599451b44SJordan Rupprecht int m_extra_one; 1699451b44SJordan Rupprecht int m_extra_two; 1799451b44SJordan Rupprecht }; 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht class B : public Extra, public virtual A 2099451b44SJordan Rupprecht { 2199451b44SJordan Rupprecht public: 2299451b44SJordan Rupprecht B (int b_value, int a_value) : Extra(b_value, a_value), A(a_value), m_b_value(b_value) {} 2399451b44SJordan Rupprecht B (int b_value, int a_value, A *client_A) : Extra(b_value, a_value), A(a_value, client_A), m_b_value(b_value) {} 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht virtual ~B () {} 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht private: 2899451b44SJordan Rupprecht int m_b_value; 2999451b44SJordan Rupprecht }; 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht static A* my_global_A_ptr; 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht int 3499451b44SJordan Rupprecht main (int argc, char **argv) 3599451b44SJordan Rupprecht { 3699451b44SJordan Rupprecht my_global_A_ptr = new B (100, 200); 3799451b44SJordan Rupprecht B myB (10, 20, my_global_A_ptr); 3899451b44SJordan Rupprecht B *second_fake_A_ptr = new B (150, 250); 3999451b44SJordan Rupprecht B otherB (300, 400, second_fake_A_ptr); 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht myB.doSomething(otherB); // Break here and get real addresses of myB and otherB. 4299451b44SJordan Rupprecht 4399451b44SJordan Rupprecht A reallyA (500); 4499451b44SJordan Rupprecht myB.doSomething (reallyA); // Break here and get real address of reallyA. 4599451b44SJordan Rupprecht 46*dd5d7300SPavel Labath myB.doSomething(*make_anonymous_B()); 47*dd5d7300SPavel Labath 4899451b44SJordan Rupprecht return 0; 4999451b44SJordan Rupprecht } 50