Bonjour à tous,
j'expose mon problème :
Une classe mère et une classe fille, tout ce qu'il y a de plus normal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Mere { private: int var; }; class Fille : public Mere { };
Je voudrais être sûr d'une chose, si j'instancie une classe fille, de la mémoire va être allouée pour var, c'est bien ça ?
(Je suppose que c'est le cas (ie j'ai de la mémoire pour var) dans ce qui suit.)
Je voudrais une classe mère qui contient une variable membre qui doit être modifiée par les filles et les filles ne doivent pas avoir var (car ici j'ai de la mémoire pour var, même si je ne peux pas y acceder).
Et en plus, je veux que les méthodes utilisées pour modifier var ne soient pas public (j'ai juste une méthode public dans les classes filles qui me permet de le faire). (Si ce n'est pas très clair sur ce point dite le moi)
Vous allez me dire de mettre var en static.
Non, en fait je veux que avoir pour chaque instance de la classe mère un var différent.
Exemple :
De plus, j'aimerais que la classe mère serve aussi d'interface pour les classes filles. J'aurais une méthode affiche qui sera dans la classe mère et qui ne sera pas redéfinie. Mais par contre je pourrais avoir une méthode conversion qui devra être redéfini dans les classes filles. (La classe mère sera surement abstraite, mais le problème ici c'est que je ne veux pas avoir de var dans les filles).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Mere * m1 = new Fille(); // var vaut par exemple 2 Mere * m2 = new Fille(); // car vaut par exemple 3 m1->setX();
Est-ce que la solution pourrait être de cette forme :
Si j veux que Mere accède a var, il faut que je fasse un friend, je mets en rouge ce que je pense qu'il faudrait ajouter.
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 class Englobe { private : friend class Mere; // correct ? int var; }; class Mere { // mere est ici mon interface pour les classes filles }; class Fille : public Mere { // fille implémente la classe mere };
Donc comme l'amitié n'est pas héritée, il faut que je fasse en protected dans mere un setVar ou équivalent pour que je puisse modifier var de ma classe englobe avec les filles.
Cela vous paraît-il correct ?
Est-ce qu'il y a une (meilleure) solution ?
Merci d'avance.
Partager