Bonjour,
j'ai un petit probleme sur des class abstraites.
voici mes declarations :
type TCreature = class private FName : string; FLifePoint : Integer; FAttackDescription, FMoveDescription : string;
protected constructor Create(const Name: string; LifePoints: Integer; const AttackDescription, MoveDescription: string); procedure Attack(Creature: TCreature);
public function GetLife: Integer; function GetName: string; procedure Bleed(LifePoints: Integer); procedure Move(Direction: Integer); procedure Revive(LifePoints: Integer); end;
THero = class(Tcreature) Public FIsMale : Boolean; FGold : Integer;
constructor Create(const Name: string; LifePoints: Integer; IsMale: Boolean); procedure AddGold(GoldAmount: Integer); procedure Attack(Monster: TMonster); function GetGold: Integer; procedure Open(Chest: TChest); end;
TMonster = class(TCreature) Protected constructor Create(const Name: string; LifePoints: Integer; const AttackDescription, MoveDescription: string); Public procedure Attack(Creature: TCreature); end;
TSerpent = class(TMonster) constructor Create(const Name: string); end;
|
Voila comme vous pouvez le lire j'ai une class meres TCreature et j'ai les 2 class Tmonster et Thero qui herite de Tcreature, et j'ai pour finir une class TSerpent qui herite de TMonster.
Mon probleme, je dois rendre les class TCreature et Tmonster non instantiable, j'ai des difficulte a trouve a savoir quel methode rendre abstract, je pensais mettre attaque en abstract, mais du coup je suis obliger de la mettre en virtual et donc de l'override dans THero et TSerpent, pour THero ca ne pose pas de probleme, mais pour Tserpent ca n'ira pas puisque TSerpent n' a pas de methode attaque, elle herite celle de TMonstre.
Voila j'espere que c'est suffisament clair.
merci d'avance pour votre aide