#include <iostream>

class Base {
	public:
		virtual int myFunc1 () = 0;
		virtual int myFunc2 () = 0;
};

class Derived1 : public Base {
	public:
		int myFunc1 () { return 1; }
		int myFunc2 () { return 2; }
};

class Derived2 : public Base {
	public:
		int myFunc1 () { return 3; }
		int myFunc2 () { return 4; }
};

void someFunction (Base* base) {
	int x = base->myFunc1 ();
	int y = base->myFunc2 ();
	std::cout << (x * y) << std::endl;
}

int main () {
	Derived1 d1;
	Derived2 d2;
	
	someFunction (&d1);
	someFunction (&d2);
}