Bonjour,

Je viens du monde Java et C. J'ai tout naturellement eu l'idée d'en "fusionner" la puissance via le C++.

Je me heurte à un petit soucis avec la surcharge d'opérateur et le polymorphisme.

Imaginons le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class A{
   public :
      virtual int& operator() (int x, int y) = 0;
};
 
class B : public A{
   private :
      int maVal;
   public :
      int& operator() (int x, int y){ return &maVal; }
};
L'idée étant de spécifier, via la classe abstraite A que les classes l'implémentant doivent proposer l'opérateur () pour l'accès à leur données. Et donc, puissent être utilisées ainsi, quelque soit l'implémentation :
Le problème étant que le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
...
A monObj = B();
monObj(2, 1) = 3;
...
ne compile pas, pour la simple raison que A étant virtuelle, elle ne peut être instanciée.
Pour utiliser le polymorphisme, on doit ainsi utiliser les pointeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
...
A *monObj = new B();
//et donc, de fait :
(*monObj)(2,1) = 3;
...
L'idée étant de mettre en place un découplage de l'interface et l'implémentation (pour faciliter la migration vers une autre librairie par exemple) mais aussi d'embellir le code des couches supérieures via la surcharge d'opérateur.

Y'a-t-il un moyen de concilier les deux, au moins en masquant le déréférencement du pointeur ?

Merci d'avance.