Ik ben net weer begonnen aan een wat groter project in C++ en toen kwam ik er ineens weer achter dat er geen interfaces bestaan en dat je klasses niet explicitiet abstract of virtual kan maken. De compiler kijkt namelijk zelf of een klasse abstract is door te kijken of hij pure virtuele methodes bevat.
Op zich is dat nog niet zo'n heel erg groot probleem, maar wat wél erg vervelend is, is dat als een klasse abstract is bevonden, ik hem zoals het er nu naar uitziet niet mag gebruiken als parameter- of return-type.
Ik ben een spelletje aan het maken waarbij verschillende soorten Players mee kunnen doen. De enige eis aan zo'n Player is dat hij een aantal methodes als makeMove() (of predict()) implementeert zodat de GameEngine die aan kan roepen, hoe de Player bepaalt welke zet hij gaat doen, verschilt per soort.
Voorbeeldje:
Code:
class Player
{
public:
virtual int predict () = 0; // pure virtual function
};
class GameEngine
{
public:
GameEngine (Player p): player(p), number(rand()%10) {}
int test () {
const int p = player.predict();
if (number == p) return 0;
if (number < p) return -1;
return 1;
}
private:
int number;
Player player;
};
En nog een voorbeeldje van een speler en een aanroep:
Code:
class IdiotPlayer : public Player
{
public:
int predict () { return 1; }
};
int main () {
IdiotPlayer idiot;
GameEngine e (idiot);
system("PAUSE");
return EXIT_SUCCESS;
}
Heeft iemand enig idee hoe ik zoiets kan doen in C++?