Jā, tas strādās. Bet viens liels Bet. Tas ir dikti slikts C++ kods. Tas jau praktiskir ir C kods. Tik ar C++ sintaksi.
Slikti ir lietot C castus, tb iekavas ar tipu tajā. Šajā gadījumā labāk derētu C++ dynamic_cast:
Node* Graph::getNode(char node)
{
for (int x = 0; x < count; x++)
{
if (Node* curr = dynamic_cast<Node*>(getItem(x)))
{
if (curr->name == node)
{
return curr;
}
}
}
return 0;
}
dynamic_cast atgriezīs NULL, ja padotais objekts nevar tikt nokāstots un Node klases pointeri. Un tādā gadījumā if's nemaz neizpildīsies.
Taču šis arī ir nelabs C++ kods. Jebkurai dynamic_cast parādīšanās būtu tev jāliek kārtīgi pārdomāt savu klašu hierarhiju.
Šajā gadījumā nevarētu iztikt ar pure virtual funkciju Item klasē?
virtual char getName() = 0;
Vai pat ne tikai getName, bet paša darba izdarīšanu, ko gribi ar Node/Item objektiem darīt:
virtual char do_your_stuff() = 0;
Tad attiecīgi Node klasē to implementēt (kā arī Graph), un tad:
void Graph::do_your_stuff(char node)
{
for (int x = 0; x < count; x++)
{
Item* item = getItem(x);
if (item->getName() == node)
{
item->do_your_stuff();
}
}
}
Kautgan arī neizskatās īpaši skaisti. Taču ko precīzāku ieteikt nezinot, ko tu tur centies izvedot, ir grūti.
(Lasīt komentārus)
Nopūsties: