Salut à tous,
voici les classes suivantes:
"test1.h"
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 #pragma once #include <string> #include <iostream> #include <sstream> using namespace std; class Base{ public: std::string key_; std::string baseDes_; Base(); virtual void createKey(); void addClassNameToKey(); }; class Derivee1: public Base{ public: std::string derivee1Des_; Derivee1(); void createKey(); }; class Derivee2:public Derivee1{ public: std::string derivee2Des_; Derivee2(); void createKey(); };
et voici le cpp
test1.cpp
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 #include "Test1.h" void Base::addClassNameToKey(){ ostringstream os; os << typeid(*this).name() ; os << "||"; string s = os.str() ; key_ = s + key_; } void Base::createKey(){ addClassNameToKey(); ostringstream os; os << baseDes_; os << "||"; key_ += os.str(); } void Derivee1::createKey(){ addClassNameToKey(); ostringstream os; os << derivee1Des_; os << "||"; key_ += os.str(); } void Derivee2::createKey(){ addClassNameToKey(); ostringstream os; os << derivee2Des_; os << "||"; key_ += os.str(); } Base::Base(): baseDes_("Ceci est la caract de la classe Base") { createKey(); } Derivee1::Derivee1(): Base(), derivee1Des_("Ceci est la caract de la classe Derivee1"){ createKey(); } Derivee2::Derivee2(): Derivee1(), derivee2Des_("Ceci est la caract de la classe Derivee2"){ createKey(); }
Lorsque je fais appel à la ligne suivante dans le main.cpp
ca fonctionne et il m'affiche en console:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Derivee2 d2; cout << d2.key_;
"class Derivee2||class Derivee1||class Base||Ceci est la caract de la classe Base||Ceci est la caract de la classe Derivee1||Ceci est la caract de la classe Derivee2||"
or ce que je voudrais c'est que pour une classe fille du type dérivée 2, il remonte jusque la base me chercher toutes les valeurs (en l'occurence BAseDes dans Base et Derivee1Des dans Derivee1, puis qu'il me cherche les infos de la classe où il est (càd derivée2) et qu'il m'affiche le nom de la classe où il est (càd class Derivee2) à l'aide de typeid.name()...
Donc je voudrais ça comme output
"class Derivee2||Ceci est la caract de la classe Base||Ceci est la caract de la classe Derivee1||Ceci est la caract de la classe Derivee2||"
au lieu de
"class Derivee2||class Derivee1||class Base||Ceci est la caract de la classe Base||Ceci est la caract de la classe Derivee1||Ceci est la caract de la classe Derivee2||"
Notez la subtilité :-)
J'ail l'impression qu'il s'agit d'une sorte d'aller retour dans les classes héritées:
Dérivée2---> Derivee1 ---> Base --->Derivée2
mais bon vu que ca marche pas...
Si vous voyez...?? pcq moi je vois pas
Merci
Partager