#include 

class X {
	public:
		virtual void f1() { cout << "X::f1"; }
		void f2() { cout << "X::f2"; }
		virtual void f3() { f1(); cout << " "; f2(); }
};

class Y : public X {
	public:
		virtual void f1() { cout << "Y::f1"; }
		void f2() { cout << "Y::f2"; }
};

int main () {
	X *xptr = new Y;
	xptr->f3();
	cout << endl;

	return 0;
}

// What is printed out when you execute this piece of code
// X::f1 X::f2
// Y::f1 Y::f2
// X::f1 Y::f2
// Y::f1 X::f2

Click here for the solution