Supposons que j'ai une classe Base qui a une variable membre A * my_hash. J'ai aussi la classe Extended qui hérite de la classe Base. J'ai aussi une classe B qui étend A.Question de conception C++
class Base{
Base(): my_hash(new A) {}
//methods which use my_hash
protected:
A* my_hash;
};
class Extended:public Base{
//methods which use my_hash from A
//I cannot have a B* my_other_hash in this class
//I would like to substitute B* my_hash
//I cannot let Base create my_hash (of type A*) because that is not what I want.
};
Je voudrais faire l'extension habituelle (c.-à-utiliser tout ce qu'il hérite de A), à l'exception et avec une différence importante, je veux my_hash d'être B * au lieu d'un*.
Chaque fois que quelque chose accède à my_hash, soit via les méthodes de Extended ou les méthodes de Base, je voudrais que les méthodes à exécuter soient des B *. Une chose à essayer: Je ne peux pas avoir un appel de méthode (par exemple, create_hash() dans Base()) que je redéfinis dans Extended. Cela ne fonctionne pas car il ne semble pas possible de remonter à la classe Extended lorsque je crée le hachage.
Je ne voudrais pas que Base soit au courant de B. Comment faire?
Est-ce que B est dérivé de A? Ou: A-t-il quelque chose à voir avec A? –
@Federico: Il est là dans le premier paragraphe "J'ai aussi une classe B qui étend A." –
Avec les réponses ci-dessous, assurez-vous que la classe A contient des méthodes virtuelles afin que si vous invoquez la méthode via le pointeur de la classe A, les méthodes de B sont exécutées. – Jagannath