Bonjour,

Je dois créer une hiérarchie de classe inutiles avec certaines caractéristiques.
Les classes ne font rien de particulier, juste imprimer quelque chose sur la sortie standard.

Entre autre ONE doit être abstraite car j'ai quelque chose a démontré avec ça.

Entre autres également démontrer:
Le mécanisme des fonctions virtuelles..
Montrer que le destructeur d'une classe abstraite doit être virtuel...
Montrer que l'opérateur = d'une classe abstraite a tout interet a etre protégé...

Enfin là n'est pas le problème, j'indique juste ce là pour expliquer mon code:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<string>
 
using namespace std;
 
//Classe ONE
//Classe de CHAR
 
class One {
 
private:
 
string onepeople;
 
 
protected:
 
void operator=(One &);//opérateur d'affectation
 
public:
		One();
		virtual void affiche_char()=0;;//methode virtuelle pure qui definit la classe One comme une classe abstraite
	    virtual ~One();
};
 
 
//Constructeurs de One
 
One::One() {
	cout<<"Creation d'un objet inutile de type char..."<<endl;
	cout<<"Appel du constructeur!"<<endl;
	cout<<endl;
 
	onepeople = "C";
}
 
//Destructeur de One
 
One::~One(){
cout<<"Destruction de l'objet inutile... "<<endl;
}
 
//Fonction d'affichage inutile
 
void One::affiche_char(){
    cout<<"Affichage de l'objet inutile de type char!"<<endl;
	cout<<"L'objet inutile se nomme:"<<onepeople<<endl;
	cout<<endl;
 
}
 
 
 
 
//CREATION D'UNE AUTRE CLASSE
//LA CLASSE TWO
//Classe de INT
//*************
 
class Two : virtual public One{
 
private:
 
int *nbr;
 
 
public:
       Two();
       void affiche_int();
 
};
 
//Constructeur de Two
 
Two::Two() {
cout<<"Creation d'un objet inutile de type int ..."<<endl;
cout<<"Appel du constructeur!"<<endl;
cout<<endl;
 
nbr = 0;
}
 
 
//Fonction affiche_autrechose
void Two::affiche_int(){
cout<<"Affichage de l'objet inutile de type int:"<<endl;
cout<<"Voici l'objet inutile: "<<nbr<<endl;
cout<<endl;
}
 
 
//CREATION D'UNE AUTRE CLASSE
//LA CLASSE THREE
//Classe de FLOAT
//*************
 
class Three : virtual public One {
 
private:
 
float nbr_float;
 
public:
       Three();
       void affiche_float();
};
 
 
//Contructeur de Three
 
Three::Three() {
cout<<"Creation d'un objet inutile de type float"<<endl;
cout<<"Appel du constructeur!"<<endl;
cout<<endl;
 
nbr_float = 3.14;
}
 
 
//Fonction d'affichage de Three
void Three::affiche_float(){
cout<<"Affichage de l'objet inutile de type float"<<endl;
cout<<"Voici l'objet inutile: "<<nbr_float<<endl;
cout<<endl; 
}
 
 
 
//CREATION D'UNE AUTRE CLASSE
//LA CLASSE Four
//Classe de TABLEAU de Char
//*************
 
class Four : public Two, public Three {
 
private:
 
vector<string>tab;
int i;
 
public:
       Four();
       void affiche_tab();
 
};   
 
//Constructeur de Four
 
Four::Four(){
cout<<"Creation d'un objet inutile de type 'tableau de char' ..."<<endl;
cout<<"Appel du constructeur!"<<endl;
 
tab.push_back("T");
tab.push_back("A");
tab.push_back("B");
tab.push_back("L");
tab.push_back("O");
}
 
 
//Fonction affiche_four
void Four::affiche_tab(){
 
size_t taille=tab.size();
 
cout<<"Affichage de la donnee inutile de la classe FOUR: un tableau de char"<<endl;
 
 
for(size_t i=0;i<taille;i++){
cout<<tab[i]<<endl;
}
cout<<endl;
}
 
 
 
//***********************
//EXECUTION DU PROGRAMME:
//***********************
 
int main (void) {
 
cout<<"Demarrage du programme inutile en cours ... "<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
cout<<endl;
cout<<endl;
 
cout<<"Ici on cree d'abord un objet inutile dans la classe ONE"<<endl;
One *inutil1;
cout<<endl;
 
cout<<"- - - - - - -"<<endl;
 
cout<<"Puis un objet inutile dans la classe TWO..."<<endl;
cout<<"(TWO etant une classe fille de ONE.)"<<endl;
cout<<endl;
Two *inutil2;
cout<<"Remarquez qu'ici il y a 2 initialisations: normal! puisque TWO herite de ONE.."<<endl;
cout<<"Cela permet de prevoir un objet pour chaque type d'appel qui suivra,"<<endl;
cout<<"Car soit on voudra afficher un INT (affiche_int), soit un CHAR (affiche_char)."<<endl;
cout<<endl;
 
cout<<"- - - - - - -"<<endl;
 
cout<<"Creation ici d'un objet inutile de la classe THREE.."<<endl;
cout<<"(THREE etant une autre classe fille de ONE)"<<endl;
cout<<"Ici idem que pour la classe TWO, 2 declarations."<<endl;
cout<<endl;
 
Three *inutil3;
cout<<endl;
 
cout<<"- - - - - - -"<<endl;
 
cout<<"Et enfin un objet de la classe FOUR est cree."<<endl;
cout<<"La classe FOUR etant une classe heritant de TWO et THREE"<<endl;
cout<<"On remarque qu'il y a 4 initialisations!"<<endl;
cout<<"Car FOUR herite de TWO, de THREE, mais egalement de ONE"<<endl;
cout<<"par l'intermediaire de TWO et FREE ! "<<endl;
cout<<endl;
 
Four *inutil4;
cout<<endl;
 
cout<<"- - - - - - -"<<endl;
cout<<"- - - - - - -"<<endl;
 
cout<<"EXECUTION DES DIFFERENTES FONCTIONS D'AFFICHAGE DES DIFFERENTES CLASSES:"<<endl;
cout<<"------------------------------------------------------------------------"<<endl;
cout<<endl;
 
inutil1.affiche_char();	
inutil2.affiche_int();
inutil2.affiche_char();
inutil3.affiche_float();
inutil3.affiche_char();
inutil4.affiche_tabc();
 
cout<<endl;
cout<<"FIN DU PROGRAMME"<<endl;
cout<<"Les destructeurs des differentes classes vont etre appeles.."<<endl;
cout<<"A BIENTOT!!"<<endl;
 
getchar();
 
//fin
}


J'ai tout d'abord un énorme problème avec la définition de l'opérateur d'affection.
Je n'ai rien vu de tel dans mon cours et je suis complètement perdue à ce sujet !
Je ne sais donc pas du tout comment le définir !


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
....
void operator=(One &);//opérateur d'affectation
....
....
void One::operator=(One &) {
 
???????????
 
}
....

Mais mon problème est tel que DEVC++ m'indique les erreurs suivantes dans le "main" :

235 C:\Dev-Cpp\main10.cpp `affiche_char' has not been declared
236 C:\Dev-Cpp\main10.cpp `affiche_int' has not been declared
...
etc ...

Pourtant les classes héritent bien entre elles, enfin apparement non !!

QUelqu'un peut il éclairer ma voie ?