/* Mystery.cpp, by M. Hazen after M. Winstanley CSE 374 class inheritance. */ #include using namespace std; class A { public: A() { cout << "a()" << endl; } virtual ~A() { cout << "~a" << endl; } virtual void m1() { cout << "A1" << endl; } virtual void m2() { cout << "A2" << endl; } }; class B : public A { public: B() { cout << "b()" << endl; } virtual ~B() { cout << "~b" << endl; } virtual void m1() override { cout << "B1" << endl; } virtual void m2() override { cout << "B2" << endl; A::m2();} void m3() { cout << "B3" << endl; } void m4() { A::m1(); } }; int main() { A* x = new A(); B* y = new B(); A* z = new B(); // pointer of type A*, class of type B cout << "Calling on A" << endl; x->m1(); x->m2(); cout << "calling on B" << endl; y->m2(); y->m3(); y->m4(); cout << "call virtual m2" << endl; z->m2(); cout << "destructing" << endl; delete x; delete y; delete z; }