1

Bonjour à tous Je suis intrigué par le morceau de code C++ suivant dans lequel la surcharge et le dépassement sont en quelque sorte simultanés.Redommander et surcharger simultanément en C++

Voici les erreurs que mon compilateur donne (mingw32-g ++ intérieur Code :: Blocks 13.12)

error: no matching function for call to 'Derived::show()' 
note: candidate is: 
note: void Derived::show(int) 
note: candidate expects 1 argument, 0 provided 

Voici le code qui les produit.

#include <iostream> 
    using namespace std; 

    class Base{ 
    public: 
     void show(int x){ 
     cout<<"Method show in base class."<<endl; 
     } 
     void show(){ 
     cout<<"Overloaded method show in base class."<<endl; 
     } 
    }; 

    class Derived:public Base{ 
    public: 
     void show(int x){ 
     cout<<"Method show in derived class."<<endl; 
     } 
    }; 

    int main(){ 
     Derived d; 
     d.show(); 
    } 

J'ai essayé de déclarer Base :: show() comme virtuel. Puis j'ai essayé la même chose avec Base :: show (int). Ne fonctionne pas non plus.

+0

Recherchez "règle de masquage". Votre compilateur fait ce qu'il doit faire. – Peter

Répondre

1

Ceci est un masque de nom. Derived::show masque les méthodes portant le même nom dans Base. Vous pouvez les présenter par using.

class Derived:public Base{ 
public: 
    using Base::show; 
    void show(int x){ 
    cout<<"Method show in derived class."<<endl; 
    } 
};