#include <iostream>
using namespace std;

class A;
class B;
class C;

class A
{
	public:
		void Testme(A& other)
		{
			cout << "value from this: " << Value() << " value from other: " << other.Value();
		}
	
	protected:
		virtual char const* Value() = 0;
};

class B : public A
{
	protected:
		char const* Value()
		{
			return "B class";
		}
};

class C : public A
{
	protected:
		char const* Value()
		{
			return "C class";
		}
};

int main() {
	B b = B();
	C c = C();
	b.Testme(c);
	return 0;
}