#include <iostream>
using namespace std;
int add(int x, int y)
{
return x+y;
}
int subtract(int x, int y)
{
return x - y;
}
int multiply(int x, int y)
{
return x * y;
}
int main()
{
int x, y;
cin >> x >> y;
int op;
cout << "0: add, 1: sub, 2: multiply" << "\n";
cin >> op;
// static binding (early binding)
//int result;
//switch(op)
//{
// case 0: result = add(x, y); break;
// case 1: result = subtract(x, y); break;
// case 2: result = multiply(x, y); break;
//}
// cout << result << "\n";
// Dynamic binding (late binding) // 속도는 좀더 느릴수있지만 더 유동적으로 쓸 수 있다.
int(*func_ptr)(int, int) = nullptr;
switch(op)
{
case 0: func_ptr = add; break;
case 1: func_ptr = subtract; break;
case 2: func_ptr = multiply; break;
}
cout << func_ptr(x, y) << "\n";
return 0;
}