Bonjour,
je suis debutant en c++ et j'ai besoin de votre aide sur un point delicat. Je dois effectuer une surcharge de l'operateur = sur une classe fille avec des attributs const. J ai du mal a comprendre comment attribuer les bons arguments aux champs privates de la classe mere. De plus je ne comprends pas pourquoi le compiler refuse la ligne suivante:
Voici le code en entier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part StartAge = o.GetStartAge
(les consignes de l'exercice m'obligent a ne pas modifier la classe mere)
classe mere:
classe fille:
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 class CBaseApplication { public: // Class constructor receives this application name. CBaseApplication(const string strName); // Class destructor. virtual ~CBaseApplication(); // This function returns this application name. string GetName() const { return m_strName; } private: // Private copy constructor and assignment operator in order to prevent // this object copying. CBaseApplication(const CBaseApplication& o); CBaseApplication& operator=(const CBaseApplication& o); // The application name. const string m_strName; }; CBaseApplication::CBaseApplication(const string strName): m_strName(strName) { } CBaseApplication::~CBaseApplication() { }
La classe mere ne peut pas etre modifie. La classe peut etre totalement modifie mais les champs prives doivent restes const.
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 class CGame : public CBaseApplication { public: CGame(const string strName = "", int start = 0, int end = 99); //constructeur CGame(const CGame& o);// constructeur par recopie CGame& operator=(const CGame& o){ //Comment recopier le nom du game ?? StartAge = o.GetStartAge; EndAge = o.GetEndAge; return this; } int GetStartAge() const{ return StartAge; } int GetEndAge() const{ return EndAge; } private: const int StartAge; const int EndAge; }; CGame::CGame(const string strName, int start, int end): CBaseApplication(strName), StartAge(start), EndAge(end) { if ((start < 0) || (start > 99) || (end < 0) || (end > 99) || (start < end)) throw CWrongAgeException(); } CGame::CGame(const CGame& o): CBaseApplication(o.GetName()), StartAge(o.StartAge), EndAge(o.EndAge){ }
Merci pour votre aide.
Partager