#include <iostream>
using namespace std;
struct father
{
/*
virtual bool set() = 0;
virtual bool get() = 0;
*/
virtual bool set(int a, int b) = 0;
virtual bool get(int a, int *b) = 0;
};
struct jack :public father
{
int x;
int y;
bool set(int a, int b);
bool get(int a,int *p);
};
struct mack :public father
{
int x;
int y;
bool set(int a, int b);
bool get(int a, int *p);
};
struct mackson :public mack
{
int x;
int y;
bool set(int a, int b);
bool get(int a, int *p);
};
bool jack::set(int a, int b)
{
x = a;
y = b;
if (a == x && b == y)
return true;
else
return false;
}
bool jack::get(int a,int *p)
{
if (0 == a)
{
p = &x;
return true;
}
else if (1 == a)
{
p = &y;
return true;
}
else
return false;
}
bool mack::set(int a, int b)
{
x = a;
y = b;
if (a == x && b == y)
return true;
else
return false;
}
bool mack::get(int a, int *p)
{
if (0 == a)
{
p = &x;
return true;
}
else if (1 == a)
{
p = &y;
return true;
}
else
return false;
}
bool mackson::set(int a, int b)
{
x = a;
y = b;
if (a == x && b == y)
return true;
else
return false;
}
bool mackson::get(int a, int *p)
{
if (0 == a)
{
p = &x;
return true;
}
else if (1 == a)
{
p = &y;
return true;
}
else
return false;
}
int main()
{
father *p1;
int a=0;
bool (father::*pf)(int a, int b) = 0;
bool (father::*pb)(int a, int *b) = 0;
p1 = new jack;
pf = &father::set;
pb = &father::get;
(p1->*pf)(5,6);
(p1->*pb)(1, &a);
cout << a << endl;
return 0;
}