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"};