Accueil > Forum > > > > probleme heritage
probleme heritage
lundi 11 février 2008 à 13:25:57 |
probleme heritage

djmanu78
|
bonjour tout le monde, j'ai quelques difficultées à trouver la solution à mon problème. je m'explique : j'ai creer une classe macollec qui regroupe dans une arraylist des personnes. j'ai donc une classe personne , ainsi qu'une classe enseignant qui heritage de la classe personne. Voici mon probleme : Lorsque je souhaite creer une methode d'ajout de personne et/ou de enseignant celle ci doit etre appeler par ne methode de saisie dans personne, or je ne vois pas comment creer cette methode (celle de la classe macollec).. je ne sais pas trop si mon explication est clair.. je vous laisse donc mon code ci dessous : (probleme ecrit en rouge vers la fin du message signalant la potentielle methode erronée) public class personne
{ // 1 attribut de classe : nombre total de personnesstaticint nbtot;
// attributs d'instance : prénom, nom, âgeprivatestring prenom;
privatestring nom;
privateint age;
// constructeurspublic personne(string N, string P, int age)
{ // une personne de plusnbtot =nbtot + 1; // constructionprenom = P; nom = N; this.age = age;
// suiviConsole.WriteLine("Construction personne"); } // méthode de classe : get_nbpersonnepublicstaticint get_nbpersonne() { return nbtot;}
// méthodes d'instance : get_nom, get_prenom, get_age, set_age, affichepublicstring get_nom() { return nom;}
publicstring get_prenom() { return prenom;}
publicint get_age() { return age;}
publicvoid set_age(int a) { age = a ;}
virtualpublicvoid affiche()
{ Console.WriteLine("\n nom : "+ this.get_nom() +"\n prenom : "+this.get_prenom()+"\n age : "+this.get_age());
} virtualpublicvoid ajouter()
{ Console.WriteLine("Veuillez saisir le nom : "); nom = Console.ReadLine(); Console.WriteLine("Veuillez saisir le prenom : "); prenom = Console.ReadLine(); Console.WriteLine("Veuillez saisir le prenom : "); age = int.Parse(Console.ReadLine());
} publicoverridestring ToString()
{ returnstring.Format("nom : " + nom + "\nprenom : " + prenom + "\nage : " + age);
} virtualpublicbool est_enseignant() {returnfalse;}
} // Nous créons une classe enseignant héritant de la classe personne : // avec comme attributs supplémentaires : la matière enseignée et le grade (certifié ou agrégé) public class enseignant : personne
{ privatestaticstring[] Tmat={"inconnue","maths","anglais","français","éco-droit","informatique"};
privatestaticint[] Tpoint = {0,10,12,13,14,15};
privatestaticstring[] Tgrad={"inconnu","certifié","agrégé"};
// attributsprivatestring matiere;
privatestring grade;
privateint point;
publicstring get_matiere() { return matiere;}
publicstring get_grade() { return grade;}
publicint get_point() { return point;}
publicint[] get_Tpoint() { return Tpoint;}
publicvoid set_point(int p) { point = p ;}
// constructeur (prenom, nom, age numero de matiere dans le tableau Tmat, numero de grade dans le tableau Tgrad)public enseignant(string N, string P, int age,int M,int G) : base( N,P,age)
{ matiere = Tmat[M]; grade = Tgrad[G]; point = Tpoint[M]; } overridepublicbool est_enseignant() {returntrue;}
// méthodes : affiche overridepublicvoid affiche()
{ base.affiche();
Console.WriteLine("\n matiere : "+matiere+"\n grade : "+grade+"\n point :"+point); } overridepublicvoid ajouter()
{ base.ajouter();
int nbmat,nbgrad,nummat,numgrad;
nbmat = Tmat.Length; nbgrad = Tgrad.Length; for (int cpt = 0; nbmat <= cpt;cpt++)
{ Console.WriteLine("Saisir le N°"+cpt+" pour la matière : "+Tmat[cpt]); } nummat = int.Parse(Console.ReadLine());
for (int cpt = 0; nbgrad <= cpt;cpt++)
{ Console.WriteLine("Saisir le N°"+cpt+" pour le grade : "+Tgrad[cpt]); } numgrad = int.Parse(Console.ReadLine());
matiere = Tmat[nummat]; grade = Tgrad[numgrad]; }
class macollec
{ // attributsprotectedstring nom;
protected ArrayList Tpers;
// constructeurpublic macollec(string n)
{ nom = n; Tpers= new ArrayList();
} public macollec()
{ nom = ""; Tpers = new ArrayList();
} ~macollec() { Console.WriteLine("Destruction de: " + nom); } public ArrayList get_Tpers() { return Tpers;}
// méthodes : affiche , ajouterpublicvoid affiche()
{ personne pers; Console.WriteLine("\n"+ Tpers.Count + " personne(s) dans la collec : " + nom); for(int i=0; i <= Tpers.Count - 1; i++ )
{ pers =(personne)Tpers[i]; pers.affiche(); } } publicstatic macollec operator+ (macollec m ,personne p)
{ m.ajouter(p); return m;
} // recherche d'un élément du tableau (méthode privée) personneprivateint index (string nom,string prenom, int age)
{ int cpt=0;
while (cpt < Tpers.Count - 1 && ((personne)Tpers[cpt]).get_nom()!= nom && ((personne)Tpers[cpt]).get_prenom() != prenom && ((personne)Tpers[cpt]).get_age() != age )
cpt++; if (Tpers.Count !=0 && (((personne)Tpers[cpt]).get_nom() == nom && ((personne)Tpers[cpt]).get_prenom() == prenom && ((personne)Tpers[cpt]).get_age() == age) )
return cpt;
elsereturn -1;
} publicbool existe (personne pers)
{ return (Tpers.Contains(pers));
} publicvoid ajouter(personne p)
{ int num = -2;
num = index(p.get_nom(),p.get_prenom(),p.get_age()); if (num != -1)
{ Console.WriteLine("Personne deja existante"); } else{ Tpers.Add(p); } } publicvoid supprimer(personne p)
{ int num = -2;
num = index(p.get_nom(),p.get_prenom(),p.get_age()); if (num == -1)
{ Tpers.Remove(p); } else{ Console.WriteLine("Personne non existante"); } } publicvoid ajouter() C'EST ICI QUE CE SITUE MON PROBLEME....(je ne sais pas comment faire ){ Console.WriteLine("que voulez-vous ajouter? 1/personne , 2/enseignant , 3/ technicien"); int test;
test = int.Parse(Console.ReadLine());
switch (test)
{ case 0 : break;
case 1 :
personne p ; p.ajouter(); this.ajouter(p);
break;
case 2 :
enseignant e; e.ajouter(); this.ajouter(e);
break;
case 3 :
technique t; t.ajouter(); this.ajouter(t);
break;
} } publicint Compte_Enseignant()
{ int z = 0;
for(int i = 0; i <= Tpers.Count-1; i++)
{ if ( ((personne)Tpers[i]).est_enseignant())
{ z++;} } return z;
} } } voila, je vous remercie de votre aide...  mman
|
|
lundi 11 février 2008 à 22:33:59 |
Re : probleme heritage

lassaad83
|
Tout d'abors il n'y a pas de définition pour un "Technicien", est ce que c'est une classe comme "enseignant" ou bien le considere tu comme étant directement une personne... ?
Aprés au niveau de tes classes il serait peut être plus judicieu de rajouter des constructeur vide.
Après tu as des readLine qui induise en erreur surtout au niveau de la méthode "ajouter()" de la class enseignant ou le système attend des saisie mais rien ne le dit a l'utilisateur, donc il serait aussi préférable de mettre des messages. Après essaye de rendre ton code plus "safe". 
Sinon après si tu veut allez plus loi au niveau de l'abstraction tu peut transfomer ta Class Personne en Interface ainsi les Class eneignant, technicien ou patati patata ... devront implémenter cette interface.
J'espere t'avoir aidé...
A+
public
class
personne
{
// 1 attribut de classe : nombre total de personnes
static
int
nbtot;
// attributs d'instance : prénom, nom, âge
private
string
prenom;
private
string
nom;
private
int
age;
// constructeurs
public
personne(
string
N,
string
P,
int
age) {
// une personne de plus
nbtot = nbtot + 1;
// construction
prenom = P; nom = N;
this
.age = age;
// suivi
Console
.WriteLine(
"Construction personne"
); }
///
<summary>
///
Instanciation d'une personne
///
</summary>
public
personne() {
// Constructeur vide a rajouter
}
// méthode de classe : get_nbpersonne
public
static
int
get_nbpersonne() {
return
nbtot; }
// méthodes d'instance : get_nom, get_prenom, get_age, set_age, affiche
public
string
get_nom() {
return
nom; }
public
string
get_prenom() {
return
prenom; }
public
int
get_age() {
return
age; }
public
void
set_age(
int
a) { age = a; }
virtual
public
void
affiche() {
Console
.WriteLine(
"\n nom : "
+
this
.get_nom() +
"\n prenom : "
+
this
.get_prenom() +
"\n age : "
+
this
.get_age()); }
virtual
public
void
ajouter() {
Console
.WriteLine(
"Veuillez saisir le nom : "
); nom =
Console
.ReadLine();
Console
.WriteLine(
"Veuillez saisir le prenom : "
); prenom =
Console
.ReadLine();
Console
.WriteLine(
"Veuillez saisir le prenom : "
);
// attention à ce que tu demande de saisir !!!
age =
int
.Parse(
Console
.ReadLine()); }
public
override
string
ToString() {
return
string
.Format(
"nom : "
+ nom +
"\nprenom : "
+ prenom +
"\nage : "
+ age); }
virtual
public
bool
est_enseignant() {
return
false
; } }
// Nous créons une classe enseignant héritant de la classe personne :
// avec comme attributs supplémentaires : la matière enseignée et le grade (certifié ou agrégé)
public
class
enseignant
:
personne
{
private
static
string
[] Tmat ={
"inconnue"
,
"maths"
,
"anglais"
,
"français"
,
"éco-droit"
,
"informatique"
};
private
static
int
[] Tpoint = { 0, 10, 12, 13, 14, 15 };
private
static
string
[] Tgrad ={
"inconnu"
,
"certifié"
,
"agrégé"
};
// attributs
private
string
matiere;
private
string
grade;
private
int
point;
public
string
get_matiere() {
return
matiere; }
public
string
get_grade() {
return
grade; }
public
int
get_point() {
return
point; }
public
int
[] get_Tpoint() {
return
Tpoint; }
public
void
set_point(
int
p) { point = p; }
// constructeur (prenom, nom, age numero de matiere dans le tableau Tmat, numero de grade dans le tableau Tgrad)
public
enseignant(
string
N,
string
P,
int
age,
int
M,
int
G) :
base
(N, P, age) { matiere = Tmat[M]; grade = Tgrad[G]; point = Tpoint[M]; }
///
<summary>
///
Instanciation d'un Enseignant
///
</summary>
public
enseignant() :
base
() {
// Constructeur vide a rajouter
}
override
public
bool
est_enseignant() {
return
true
; }
// méthodes : affiche
override
public
void
affiche() {
base
.affiche();
Console
.WriteLine(
"\n matiere : "
+ matiere +
"\n grade : "
+ grade +
"\n point :"
+ point); }
override
public
void
ajouter() {
base
.ajouter();
int
nbmat, nbgrad, nummat, numgrad; nbmat = Tmat.Length; nbgrad = Tgrad.Length;
// ton tableu est rempli le code entre la boucle FOR ne sera pas éxécuté
for
(
int
cpt = 0; nbmat <= cpt; cpt++) {
Console
.WriteLine(
"Saisir le N°"
+ cpt +
" pour la matière : "
+ Tmat[cpt]); }
// puisque on est pas entré dans la boucle FOR l'utilisateur ne saura pas
// qu'il doit saisir un nombre
// pense a rajouter un message dans ce cas la.
nummat =
int
.Parse(
Console
.ReadLine());
// ton tableu est rempli le code entre la boucle FOR ne sera pas éxécuté
for
(
int
cpt = 0; nbgrad <= cpt; cpt++) {
Console
.WriteLine(
"Saisir le N°"
+ cpt +
" pour le grade : "
+ Tgrad[cpt]); }
// puisque on est pas entré dans la boucle FOR l'utilisateur ne saura pas
// qu'il doit saisir un nombre
// pense a rajouter un message dans ce cas la.
numgrad =
int
.Parse(
Console
.ReadLine());
matiere = Tmat[nummat]; grade = Tgrad[numgrad]; } }
public
class
macollec
{
// attributs
protected
string
nom;
protected
ArrayList
Tpers;
// constructeur
public
macollec(
string
n) { nom = n; Tpers =
new
ArrayList
(); }
public
macollec() { nom =
""
; Tpers =
new
ArrayList
(); } ~macollec() {
Console
.WriteLine(
"Destruction de: "
+ nom); }
public
ArrayList
get_Tpers() {
return
Tpers; }
// méthodes : affiche , ajouter
public
void
affiche() {
personne
pers;
Console
.WriteLine(
"\n"
+ Tpers.Count +
" personne(s) dans la collec : "
+ nom);
for
(
int
i = 0; i <= Tpers.Count - 1; i++) { pers = (
personne
)Tpers[i]; pers.affiche(); } }
public
static
macollec
operator
+(
macollec
m,
personne
p) { m.ajouter(p);
return
m; }
// recherche d'un élément du tableau (méthode privée) personne
private
int
index(
string
nom,
string
prenom,
int
age) {
int
cpt = 0;
while
(cpt < Tpers.Count - 1 && ((
personne
)Tpers[cpt]).get_nom() != nom && ((
personne
)Tpers[cpt]).get_prenom() != prenom && ((
personne
)Tpers[cpt]).get_age() != age) cpt++;
if
(Tpers.Count != 0 && (((
personne
)Tpers[cpt]).get_nom() == nom && ((
personne
)Tpers[cpt]).get_prenom() == prenom && ((
personne
)Tpers[cpt]).get_age() == age))
return
cpt;
else
return
-1; }
public
bool
existe(
personne
pers) {
return
(Tpers.Contains(pers)); }
public
void
ajouter(
personne
p) {
int
num = -2; num = index(p.get_nom(), p.get_prenom(), p.get_age());
if
(num != -1) {
Console
.WriteLine(
"Personne deja existante"
); }
else
{ Tpers.Add(p); } }
public
void
supprimer(
personne
p) {
int
num = -2; num = index(p.get_nom(), p.get_prenom(), p.get_age());
if
(num == -1) { Tpers.Remove(p); }
else
{
Console
.WriteLine(
"Personne non existante"
); } }
public
void
ajouter()
{
Console
.WriteLine(
"que voulez-vous ajouter? 1/personne , 2/enseignant , 3/ technicien"
);
int
test; test =
int
.Parse(
Console
.ReadLine());
switch
(test) {
case
0:
break
;
case
1:
personne
p =
new
personne
();
// Ici tu dois instancier ta class personne
p.ajouter();
this
.ajouter(p);
break
;
case
2:
enseignant
e =
new
enseignant
();
// ici tu dois instancier ta class enseignant
e.ajouter();
this
.ajouter(e);
break
;
case
3:
//technique t; --> par contre ici, il faut que tu donne une définition pour le type technicien : est ce une presonne
//t.ajouter();
//this.ajouter(t);
break
; } }
public
int
Compte_Enseignant() {
int
z = 0;
for
(
int
i = 0; i <= Tpers.Count - 1; i++) {
if
(((
personne
)Tpers[i]).est_enseignant()) { z++; } }
return
z; } } }
|
|
Cette discussion est classée dans : int, age, console, get, prenom
Répondre à ce message
Sujets en rapport avec ce message
probleme heritage (objet) [ par djmanu78 ]
bonjour tout le monde,j'ai quelques difficultées à trouver la solution à mon problème.je m'explique :j'ai creer une classe macollec qui regroupe dans
Héritage, polymorphie et surcharge [ par Kleino ]
Slt á ts,je suis nouveau et travaille les heritages, la polymorphie et les surcharges en c#Cependant je suis coincéet récolte cette erreur: Method mus
PROBLEME urgent sur une erreur etrange, du a un tableau de structure [ par masakoche ]
l'erreur est la suivante : Accessibilité incohérente : le type de paramètre 'ConsoleApplication1.Class1.PERS[]' est moins accessible que la méthode 'C
Border flou [ par Cecile5 ]
Bonjour à tous, J'ai un petit soucis avec des Border qui ne se comportent pas comme je veux. Voici ce qu'il faut faire pour reproduire mon problème
combinaisons [ par nadjim ]
bonjour à tous J'ai besoin de créer une fonction qui me sortent les combinaison d'un tableau de taille n. Je viens de faire quelques essais, et j'ai
[C#] Inversion de Nombre (Débutant) [ par momos73 ]
Bonjour, Je commence totalement à programmer en C# et je n'ai donc aucune connaissance dans ce language. Je dois faire un programme en mode console co
IMPRIMER l'ecran dun mode console [ par masakoche ]
Bonjours tous le monde et bonne année!Bon moi en fait je voudrais savoir comment imprimer en mode console ce qui saffiche a l'écran.Je me demande si o
Problème avec les pointeurs [ par M5i9k ]
Bonjour,Je cherche à utiliser un pointeur en lui fournissant une adresse, dans le but d'acceder une variable d'un autre programme , mais ça ne marche
Besoin d'aide sur mon code. [ par Adry_34160 ]
Bonjour,Je tente de faire mon premier programme.Un simple affichage de Table de multiplication. Mais une erreur me bloque: 'System.Array' ne contient
Débutant : Boucle for... [ par arthur148 ]
Voila j'ai un petit problème, je dois realiser un sapin qui s'affiche dans une console de cette facon : ** *** **** ****** ****************
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|