#include <iostream>
#include <conio.h>
using namespace std;

class A
{
public:
	int a;
	int b;
	void Vypis();
	void Nacti();
};

void A::Vypis()
{
	cout << "Vypis";
}

void A::Nacti()
{
	cout << "Nacti";
}

// deklarace ukazatele na vlastnost tridy A typu int
int A::*ukNaInt;
// ukazatel nametodu tridy A vracici void a nemajici zadne vstupni parametry
void (A::*ukNaMetodu)();


void main()
{
	A inst;
	A inst2;
	inst.a = 1;
	inst.b =2;
	inst2.a = 3;
	inst2.b = 4;
	// prirazeni ukazatele na vlastnost a tridy A
	ukNaInt = &A::a;
	// pouziti ukazatele na vlastnost tridy A
	cout << "hodnota:" << inst.*ukNaInt;
	cout << "hodnota:" << inst2.*ukNaInt;	
	ukNaInt = &A::b;
	cout << "hodnota:" << inst.*ukNaInt;
	cout << "hodnota:" << inst2.*ukNaInt;

	cout << endl;
	// prirazeni ukazatele na metodu Nacti tridy A
	ukNaMetodu = &A::Nacti;
	// zavolani metody tridy A, na kterou ukazuje ukazatel
	(inst.*ukNaMetodu)();
	ukNaMetodu = &A::Vypis;
	(inst.*ukNaMetodu)();

	getch();
}
