Bonsoir à toutes et à tous !
C’est encore moi avec mon C++ Primer et mes questions #HommeLourd
L’anglais ne me pose pas de problèmes mais j’avoue que plus je rentre dans les parties techniques du C++, plus l’incertitude s’installe.
J’ai compris le concept de base des classes (Les écrires, membres et méthodes, private et public, prog. modulaire, constructeur (implicite ou pas) et destructeur.)
En arrivant à la partie sur this, j’ai saisi le fait que ce pointeur particulier est fait pour contenir l’adresse de la classe ou il est utilisé.
Cependant, je ne comprends pas entièrement à quoi il va bien pouvoir me servir et comment l’utiliser correctement.
Voici une classe de test que j’ai écrite afin de pouvoir comprendre ce pointeur :
class.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #ifndef CLASS_H #define CLASS_H class Test { private: std::string m_testVar; public: Test(std::string testVar); ~Test(); void show(); void modify(Test & x, std::string s); }; #endif |
class.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> #include <string> #include "class.h" Test::Test(std::string testVar) : m_testVar(testVar) { } Test::~Test() { } void Test::show() { std::cout << m_testVar << std::endl; } void Test::modify(Test::Test & x, std::string s) { this->m_testVar = s; } |
Explications : Je souhaite au cours du programme pouvoir modifier, après avoir instancié un objet ’Test’, la valeur de son seul membre m_testVar qui est de type std::string
(Par exemple, j’instancie un objet ’Test’ avec une littérale "Salut les canards" puis grâce à la méthode .modify()
je change pour la littérale "Coin Coin" en lui passant par référence son propre objet et bien sûr la littérale en question.)
- Est-ce que c’est comme ça qu’on fait ?
- Est-ce que par rapport à la norme on a le droit de modifier un membre privé ?
- Est-ce que mon jargon est correct ? (Oui quitte à prendre des bonnes pratiques, autant faire d’une pierre deux coups)
- Que pouvez vous me dire de plus sur ce pointeur ?
J’ai testé tout ça et ça fonctionne en tout cas, mais le compilateur me claque un warning dans la tronche et de ce que j’applique du cours de @gbdivers (Que je lis en parrallèle), c’est que les warnings ça fait chier.
Je compile sous Debian Stretch par le biais de make avec le compilateur CLang 3.9 et la norme C++14.
Pour le warning, CLang m’indique : class.cpp:20:32: warning: unused parameter 'x' [-Wunused-parameter]
void Test::modify(Test::Test & x, std::string s)
, ce qui est vrai donc je pense que j’utilise mal la chose.
Merci pour vos réponses, et si je n’ai pas été clair dans mes explications faites-le moi savoir c’est important !