Salut les C++,
Cette nuit j'ai tenté de coder une mini-classe de base (un membre, une méthode) dont d'autres classes devaient hériter.
Et j'ai codé, naturellement sans me poser de questions, pratiquement le même bout de code suivant, au type du membre et de la méthode près :
Et le compilateur (g++ -std=c++11 testit.cpp ) a renvoyé le message d'erreur suivant :
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 class Base_Test { public : int m_int ; Base_Test() {} ; int get_int() { return m_int ; } ; } ; class Test : public Base_Test { public : Test(const int integer) ; } ; Test::Test(const int integer) : m_int(integer) { /** etc.. **/ ; }
Bon. Étant débutant mais quand même (3 mois de C++) je me suis dit que si les 23 lignes qui sont censées définir une classe dont une autre hérite me viennent pas naturellement je devais avoir un problème avec l'héritage de classe défini personnellement, ce pourquoi je poste.testit.cpp: In constructor ‘Test::Test(int)’:
testit.cpp:19:33: error: class ‘Test’ does not have any field named ‘m_int’
Test::Test(const int integer) : m_int(integer) {
Car je me sens frustré de cet mini échec, vous me direz c'est pas compliqué : merci, je sais. J'ai déjà fait ça, de l'héritage avec du C++, notamment des jeux avec gtkmm entre autres.
J'aurais pu rapidement trouver la solution à mon problème tout seul mais je me soucie du mauvais réflexe ou plutôt de ce qui manque, je suppose, dans la définition des classes.
Alors je voudrais que vous m'aidiez à comprendre ce qui ne va pas dans mon code (réflexe) car si je dois coder une dans une situation d'héritage je referai la même erreur, je pense, si vous ne me corrigez pas. Ce pourquoi je poste.
Merci pour votre aide précieuse.
Une autre chose plus intéressante à débattre:
J'aimerais savoir (ou avoir votre avis) sur le fait de soit:
1. mettre une variable en membre private et implémenter des accesseurs.
2. mettre une variable en membre en public et y accéder directement.
Car j'ai souvent lu | vu qu'il faillait préférer la première solution.
Il n'y a aucun problème pour moi, mais j'aimerais savoir d'où vient ce conseil ou plutôt quel sont les avantages de la première solution.
Il faut dire que je n'ai pas encore lu de bouquin sur comment coder correctement ou de manière optimiser en C++: les bon usages brefs.
Alors est-ce:
1. Pour des question de clarté de code ?
2. Pour des raisons de performances ?
3. Se protéger contre soit-même (c'est débile) ?
4. Ce sont les usages ?
Bref : pourquoi se compliquer la vie avec 2 méthodes de plus (qui sont souvent définies dans la déclaration de la classe, donc considérées comme des méthodes inline par le compilateur) et qu'a l'espace private de plus ?
J'aimerais comprendre le pourquoi du comment, bref ce qui se cache sous le capot.
Merci pour vos réponses éclairées et l'aide apportée.
Bon code C++ à vous.
Partager