Comment appeler de l'enfant de la méthode à partir d'un parent pointeur en c++?
J'ai une classe de base et un enfant de la classe ou de l'étendre. L'enfant de la classe a sa propre méthode à l'intérieur de la classe parent n'a pas. C'est, en la déclarant comme virtuelle dans la classe de base n'est pas vraiment une option.
class A {
public:
virtual void helloWorld();
};
class B : public A {
public:
virtual void helloWorld();
void myNewMethod();
};
Alors, dans mon application, j'ai un pointeur vers Un et j'ai construit, comme B:
//somewhere in a .cpp file
A* x;
x = new B();
x->myNewMethod(); //doesn't work
Ma solution actuelle est de le jeter:
((B *)x)->myNewMethod();
Ma question est, est-il une manière plus propre de faire cela, ou est le casting du chemin à parcourir?
OriginalL'auteur Sefu | 2013-03-10
Vous devez vous connecter pour publier un commentaire.
Un casting semble être OK dans ce cas. Cependant, plutôt que de style C plâtres, vous devez utiliser
dynamic_cast<>
(dans le cas où vous n'êtes pas sûr de savoir six
renvoie un objet de type deB
):D'autre part, si vous êtes sûr que
x
pointe vers un objet de typeB
, alors vous devriez utiliserstatic_cast<>
:OriginalL'auteur Andy Prowl
A
ne définit pas de méthode appeléemyNewMethod()
, donc il ne peut pas l'invoquer.Même si j'ai l'habitude de vous déconseillons fortement de la coulée, d'ici, en effet casting est le seul moyen.
OriginalL'auteur poitroae
Bien, vous allez avoir à jeter mais vous pouvez rendre le code plus propre/plus lisible en cachant le laid casting de la syntaxe d'une fonction.
OriginalL'auteur Adam Zahran