Instancier une sous-classe
Bonjour,
je voudrais créer une structure de base avec une classe, puis me servir de cette structure dans une sous-classe comprenant un tableau dynamique.
Mais lorsque j'essaye d'instancier ma variable 'ValeurTemp' dans le constructeur (SetLength(ValeurTemp, 0);), j'obtiens un message d'erreur 'Violation d'accès ...' ???
Voici le bout de code.
Merci pour votre aide qui nous fait tant progresser.
Bonne journée.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
Type
//------------------------------------------------------------- Type de base
TTypeDeBase = Class
Val1 : double; // valeur du premier curseur
Val2 : byte; // valeur du second curseur
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
//-------------------------------------------- Tableau de curseurs verticaux
TValeur = Class(TTypeDeBase)
public
{ Déclarations publiques }
Constructor Create();
Destructor Destroy; Override;
Procedure SetVal1(Val: Double);
private
TabValeur : array of TValeur; // déclaration d'un tableau dynamique de couples de valeur
{ Déclarations privées }
end;
//----------------------------------------------------------------------------
Var
//............................................................................
ValeurTemp : TValeur; // instance du tableau dynamique des couples de valeur
//............................................................................
implementation
//******************************************************************************
//*********************** Constructeur & Destructeur ***********************
//******************************************************************************
Constructor TCursVert.Create();
begin
SetLength(ValeurTemp, 0);
end;
//------------------------------------------------------------------------------
Destructor TCursVert.Destroy();
begin
SetLength(ValeurTemp, 0);
Inherited Destroy;
end;
//******************************************************************************
//******************** Fin du Constructeur & Destructeur *******************
//****************************************************************************** |
instancier une sous-classe
Bonjour,
merci pour la réponse.
je me suis mal exprimé.
dans un autre endroit du programme,
j'essaye d'instancier ma sous-classe.
Code:
1 2 3 4 5 6 7
|
var
MonTValeur: TValeur;
begin
MonTValeur:=TValeur.create;
// ...
end; |
au moment de la création,
sur la ligne SetLength(ValeurTemp, 0);
j'ai le message d'erreur.
Bonne journée
et merci pour les réponses
instancier une sous-classe
Bonjour,
merci pour vos réponses.
j'ai un point bloquant.
je recommence pour essayer d'être beaucoup plus clair.
le but est de me servir d'un tableau dynamique (dans une sous-classe)
-------------------------------------
je crée une Super-classe,
puis une classe issue de ma Super-Classe.
je crée un tableau dynamique dans une sous-classe constitué d'élément de ma classe.
je n'arrive pas à accéder aux attributs de ma classe et de ma Super-classe.
la procédure 'ToutEnRouge();' provoque un message d'erreur 'Violation D'accès'
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
procedure TForm1.Button1Click(Sender: TObject);
var
MonTableau: TSousClasse;
begin
MonTableau:=TSousClasse.Create;
try
MonTableau.DimensionneTableau(10);
MonTableau.ToutEnRouge;
finally
MonTableau.Free;
end;
end; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
unit UntClasses;
interface
Uses
Types, Graphics;
Type
//------------------------------------------------------------- Super Classe
TSuperClasse = Class
Actif : boolean; // true = utilisé
TypeElement : byte; // type de l'élément utilisé
Couleur : word; // Numéro de la couleur utilisée pour représenter le curseur
Position : TPoint; // position sur l'écran
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
//------------------------------------------------------------------- Classe
TClasse = Class(TSuperClasse)
Val1 : double; // première valeur
Val2 : double; // seconde valeur
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
//------------------------------ Sous-Classe comprenant le tableau dynamique
TSousClasse = Class(TClasse)
public
{ Déclarations publiques }
Constructor Create();
Destructor Destroy; Override;
// ...
Procedure DimensionneTableau(longueur: word); // dimensionnement du tableau dynamique
Procedure ToutEnRouge(); // passe tous les éléments du tableau en rouge
private
TableauDyn : array of TClasse; // déclaration du tableau dynamique
{ Déclarations privées }
end;
//----------------------------------------------------------------------------
implementation
//******************************************************************************
//*********************** Constructeur & Destructeur ***********************
//******************************************************************************
Constructor TSousClasse.Create();
begin
SetLength(TableauDyn, 0);
end;
//------------------------------------------------------------------------------
Destructor TSousClasse.Destroy();
begin
SetLength(TableauDyn, 0);
Inherited Destroy;
end;
//******************************************************************************
//******************** Fin du Constructeur & Destructeur *******************
//******************************************************************************
//******************************************************************************
//****************** dimensionnement du tableau dynamique ******************
//******************************************************************************
Procedure TSousClasse.DimensionneTableau(longueur: word);
begin
SetLength(TableauDyn, longueur);
end;
//******************************************************************************
//*************** Fin de dimensionnement du tableau dynamique **************
//******************************************************************************
//******************************************************************************
//************ Passage de tous les éléments du tableau en rouge ************
//******************************************************************************
Procedure TSousClasse.ToutEnRouge(); // passe tous les éléments du tableau en rouge
var
i : integer; // compteur de boucle
begin
for i:=0 to High(TableauDyn) do
TableauDyn[i].Couleur:=ClRed;
end;
//******************************************************************************
//********* Fin du passage de tous les éléments du tableau en rouge ********
//******************************************************************************
end. |
instancier une sous-classe
Bonjour,
merci pour la réponse.
Mon problème et justement que je n'arrive pas à remplir le tableau.
tous les accès aux attribut de Classe et de Super-classe provoque le message d'erreur
Bonne journée.
et merci pour votre aide et votre patience
instancier une sous classe
Bonjour,
le but premier est de faire une super classe (par exemple Figure géométrique) qui aura ses attributs. (Position de l'objet X, Y; couleur, ...)
--> d'en tirer une classe ou chaque figure sera décrite avec ses attributs propres
(exemple: Carré : qui utilisera les attributs de super classe et qui aura un (ou des) attribut(s): cote
Cercle: attribut rayon
Rectangle: attribut: largeur, hauteur)
--> d'en tirer une sous classe avec un tableau d'objets
comme dans le petit bout de code posté le 17 septembre à 3h18
Quelqu'un pourrait me dire pourquoi ce petit bout de code provoque une erreur à chaque fois que j'essaye de remplir ou modifier le tableau dynamique ?
merci pour votre aide.
bonne journée
Instancier une sous-classe
Bonjour,
la dernière réponse de Popo m'a permis de modifier les objets de la Super-Classe.
et de trouver une erreur dans la définition de ma Sous-Classe
//------------------------------ Sous-Classe comprenant le tableau dynamique
TSousClasse = Class et non pas TSousClasse = Class(TClasse)
car je veux juste créer un tableau dynamique d'objet de type TClasse
Il me manquais également les accesseurs pour accéder aux membres de ma classe et ma SuperClasse.
en fait quel est la différence entre des accesseurs et
property X : Integer read FX write FX; ?
merci pour votre dévouement.
bonne journée
Instancier une sous classe
Bonjour, merci pour la réponse.
oui, c'est exact.
mais le but était de créer un tableau dynamique d'objet (TClasse) dérivé de TSuperClasse.
Merci encore pour toutes ces réponses car la gestion des classes n'est pas toujours bien expliqué
bonne journée:P