/*
// zdefiniowac klasê o nazwie chrystus(abstrakcja chyba)
// z tej klasy nie można stworzyĉ obiektu
//klasa chrystus zawiera w polu prywatnym definicjê klasy anio³ek
//klasa chrystus posiada dynamicznı tablicê anio³ków
//istnieje równiez bazowa klasa koció³, która jest podstawowa klası dla wystêpujıcych klas
//po tej klasie dziedziczı - koció³ katolicki oraz koció³ prawos³awny
//a po tych dwóch klasa koció³ protestancki
//nastepnie zdefiniowaĉ klasê prezydent
//w polu prywatnym tej klasy umieciĉ tablicê kocio³a(dynamicznı tablicê kocio³ów)
//za pomocı funkcji virtualnej zademonstrowaĉ
//że prezydent klêczy przed każdym kocio³em
zademonstrowaĉ, ze prezydent wyznaje tylko chrystusa, wiêc należy do kocio³a katolickiego
klasa chrystus nie może byĉ obiektem
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Chrystus
{
private:
class Aniolek
{
char imie;
};
static Aniolek* aniolki;
public:
virtual ~Chrystus() = 0;
void setA(char imie, int i)
{
//aniolki[i] = new Aniolek;
//aniolki[i]->imie = imie;
}
void getA(int i)
{
//cout << aniolki[i]->imie;
}
static void createAngel(int size)
{
aniolki = new Aniolek[size];
}
};
//Aniolek Chrystus::aniolki = nullptr;
class Kosciol
{
public:
virtual void gdzie()
{
cout << "kosciol " << endl;
}
};
class K_Katolicki : virtual public Kosciol
{
public:
void gdzie()
{
cout << "kosciolem katolickim" << endl;
}
};
class K_Prawoslawny : virtual public Kosciol
{
public:
void gdzie()
{
cout << "kosciolem prawoslawnym" << endl;
}
};
class K_Protestancki : public K_Katolicki, public K_Prawoslawny
{
public:
void gdzie()
{
cout << "kosciolem protestanckim" << endl;
}
};
class Prezydent
{
private:
Kosciol** tablica = new Kosciol*[3]; //Tak nie robimy!!
public:
virtual void klecze(int i)
{
cout << "klecze przed ";
tablica[i]->gdzie();
}
template<typename T>
void setK(int i)
{
tablica[i] = new T;
}
Prezydent()
{
cout << "stalem sie prezydentem" << endl;
Kosciol** tablica = new Kosciol*[3];
}
};
int main()
{
Prezydent* prezydent = new Prezydent();
prezydent->setK<K_Katolicki>(0);
prezydent->setK<K_Prawoslawny>(1);
prezydent->setK<K_Protestancki>(2);
for (int i = 0; i < 3; i++)
{
prezydent->klecze(i);
}
delete prezydent;
cout << endl << "nacisnij klawisz aby zakonczyc" << endl;
//getchar();
return 0;
}