2017-08-29 4 views
3

Y at-il de toute façon un type d '"héritage d'empilement" où vous remplacez potentiellement plusieurs fonctions d'une classe de base en fonction d'autres appels?polymorphisme C++ de plusieurs classes

par exemple quelque chose comme:

class Base { 
     void func1(){/* do something */} 
     void func2(){/* do something */} 
}; 
class A1 { 
     void func1(){/* do something else */} 
}; 
class A2 { 
     void func2(){/* do something else */} 
}; 

int main(){ 
    A1 a1obj = new A1(); 
    A2 a2obj = new A2(); 
    Base obj = new Base(); 

    obj = &a1obj; 
    obj = &a2obj; 
    obj.func1(); //now A1::func1() 
    obj.func2(); //now A2::func2() 
} 

Merci

+0

Ouvrez votre C++ livre au chapitre qui explique comment utiliser ' std :: function', et le lire. –

+0

Oui, mais vos fonctions doivent être virtuelles, vous devez dériver de la classe de base, et vous devrez utiliser des pointeurs ou des références si vous utilisez le type de base pour que le polymorphisme fonctionne. –

+0

Cela sera probablement répondu [en lisant un couple de bons livres pour débutants] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

Répondre

1

Il y a des fonctions virtuelles et l'héritage multiple (qui devrait être évité si possible) en C++.

Qu'est-ce que vous pourriez faire dans ce cas est:

class Base { 
     virtual void func1(){/* do something */} 
     virtual void func2(){/* do something */} 
}; 
class A1: public Base { 
     void func1() override {/* do something else */} 
}; 
class A2: public A1 { 
     void func2() override {/* do something else */} 
}; 

int main(){ 
    A2 a2obj; 
    Base* obj = &a2obj; 

    obj->func1(); //now A1::func1() 
    obj->func2(); //now A2::func2() 
} 

vous pourriez même sauter instanciation de l'objet de base et juste faire

int main(){ 
    A2 obj; 

    obj.func1(); //now A1::func1() 
    obj.func2(); //now A2::func2() 
} 
+2

Ce n'est pas seulement * peut sauter *, c'est * doit sauter *. Sinon, la 'base' est fuite dans votre exemple. – spectras