je cherche comment declarer un type en c++ comme l'exemple suivant:
type fruits={pomme,banane,orange}
note:j'ai pas pu avec enum parce que elle travail que avec des entiers et n'utilise pas les chaines de caracteres
Version imprimable
je cherche comment declarer un type en c++ comme l'exemple suivant:
type fruits={pomme,banane,orange}
note:j'ai pas pu avec enum parce que elle travail que avec des entiers et n'utilise pas les chaines de caracteres
Pourquoi �a ne te va pas
As-tu r�ellement besoin d'une cha�ne de caract�res ?Code:enum Fruit {POMME, BANANE, ORANGE}
Salut,
Il faut savoir que, en C++, on trouve diff�rents types, qui se d�clinent en deux grandes cat�gories:
- les types primitifs (fournis par le langage, en dehors de toute biblioth�ques), � savoir:
- (unsigned) char
- (unsigned) short (int)
- (unsigned) int
- (unsigned) long (int)
- parfois(unsigned) long long
- float
- double
- parfois double double
- les types d�finis par l'utilisateur, qui regroupent
- les unions
- les structures
- les classes
- les �num�rations
- les d�finition ("alias") de type (typedef)
D�s lors, le seul type qui sera r�ellement en mesure de contenir "pomme","poire","peche" ou "kiwi"... ce sera une chaine de caract�re.
Tu peux, bien sur, envisager d'utiliser cette chaine de caract�res comme une cl� (pour un std::set ou pour une std::map), mais il te restera, de toutes facons... � cr�er le type correspondant ;)
De prime abord, je vois donc deux possibilit�s pour r�soudre ton probl�me:
tu d�finis une classe mere "fruit" du genre de
dont tu fais d�river les diff�rents fruits que tu veux utiliser, sous la forme deCode:
1
2
3
4
5
6
7
8
9
10
11
12 class Fruit { public: const std::string& monNom() const {return nom;} bool jeSuisUn(const std::string fn){return nom==fn;} virtual ~Fruit(); protected: Fruit(const std::string& nom):nom(nom){} private: std::string nom; };
et que tu pourrais utiliser sous une forme proche deCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Banane:public Fruit { public: Banane():Fruit("banane"){} }; class Kiwi:public Fruit { public: Kiwi():Fruit("kiwi"){} }; class Pomme:public Fruit { public: Pomme():Fruit("pomme"){} }; /*...*/
ou alors, tu travailles sur base d'une �num�ration et d'un tableau static de chaines de caract�res constantes:Code:
1
2
3
4
5
6
7
8
9
10 void mafonct() { std::vector<Fruit*> tabfruit; tabfruit.push_back(new Banane); tabfruit.push_back(new Kiwi); tabfruit.push_back(new Pomme); /*...*/ for(size_t i=0;i<tabfruit.size();i++) std::cout<<"le fruit "<< i+1<<" est "<<tabfruit[i].monNom()<<sd::endl }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 enum efruit { POMME, POIRE, PECHE, KIWI, ORANGE, BANANE /*...*/ }; class Fruit { public: Fruit(efruit what):what(what){} const std::string& monNom(){return word[(int)what];} boole Je suis(const std::string& name){return word[(int)what]==nom;} private: efruit what; static const std::string word[6];//nombre à adapter selon tes besoins ;) }; const std::string Fruit::word[6]={"pomme","poire","peche","kiwi","organge","banane"};