Ahoj,
programuji nyní v C++ šachy a narazil jsem na pár problému týkajících se objektů a dědičnosti. Mám objekt Figura, u kterého mám definované některé základní metody jako GetColor, GetPosition. Z této třídy potom dědí třídy Pěšec, Kůň, Královna, ... style
class Kun: public figura{
...
}
Hrací plochu potom implementuji pomocí dvojrozměrného pole 8x8:
Figury *** hraci_plocha = new Figura**[8];
for (i = 0; i != 8; i++){
hraci_plocha[i] = new Figura*[8];
}
Do tohoto pole potom ukládám jednotlivé figury, popř je označím jako prázdné políčko.
hraci_plocha[0][0] = GetVez(0,0, CERNA)
A nyní již k samotnému problému:
V grafickém rozhraní, když člověk klikne na některou figuru, tak se nejprve musí vypočítat, na které pole může daná figura skočit. U každé figury jsem proto implementoval metodu GetTahy(). Ale provedu následující kód, tak skončí chybou:
hraci_plocha[0][0].GetTahy();
, tak se metoda GetTahy hledá ve třídě Figura, místo ve třídě Vez.
Jasně, hraci_plocha je pole Figura, ale čekal bych, že když mi kompilátor dovolí tam uložit potomky třídy Figura, tak že s ním potom bude zacházet jako s potomkem a ne jako s Figurou.
Dá se tento problém nějak vyřešit, nebo je celý můj návrh špatný a měl bych to předělat..
Děkuji, Jakub