Bonsoir,
voilà j'ai un petit souci, et je ne sais pas si c'est un souci de conception ou d'implémentation.
Je m'explique
J'ai une classe Forme dont je vais dériver un cercle.
Je désire que cette classe Forme soit une classe abstraite. Cette classe ainsi que la classe Cercle vont voir leurs operateur >> et << surchargés.
J'ai donc commencé par la surcharge de l'operateur >>
voilà la déclaration de la classe Forme (qui se distingue par une couleur)
et son implémentation (du moins la partie qui nous intéresse)
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 #ifndef FORME_H #define FORME_H #include <iostream> class Forme { public: Forme(short = 1); Forme(const Forme &); virtual ~Forme() = 0; Forme & operator = (const Forme &); friend std::istream & operator >> (std::istream &, Forme &); friend std::ostream & operator << (std::ostream &, const Forme &); private: short couleur; }; #endif // FORME_H
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 istream & operator >> (istream & in, Forme & objectToGet) { cout << "Couleur = "; in >> objectToGet.couleur; return in; }
et voici la même chose pour la classe cercle (qui se distingue par un centre et un rayon + une couleur ) et qui dérive de forme
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 #ifndef CERCLE_H #define CERCLE_H #include <iostream> #include "coordonnee.h" #include "forme.h" class Cercle : public Forme { public: Cercle(int = 0, int = 0, short = 0, short = 0); Cercle(const Cercle &); ~Cercle(); Cercle & operator = (const Cercle &); friend std::istream & operator >> (std::istream &, Cercle &); friend std::ostream & operator << (std::ostream &, const Cercle &); private: Coordonnee centre; short rayon; }; #endif // CERCLE_H
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 istream & operator >> (istream & in, Cercle & objectToGet) { in >> objectToGet.centre; in >> (Forme)objectToGet; cout << "Rayon = "; in >> objectToGet.rayon; return in; }
le code suivant :
in >> (Forme)objectToGet;
pose problème, Forme étant une classe abstraite je ne peux pas instancié un
objet de type Forme.
J'ai essayé d'abord d'enlever le fait que Forme soit une classe abstraite, j'obtiens alors l'erreur suivante:
C:\c++\2\cercle.cpp|34|error: no match for 'operator>>' in 'in >> Forme(((const Forme&)((const Forme*)((Forme*)(+objectToGet)))))'|
et je dois dire que je suis perdu.
Si quelqu'un pouvait me dire où se situe le problème, merci
Partager