problema c ++ con sovraccarico di funzioni in una class ereditata

Questa è probabilmente una domanda noob, mi dispiace per quello. Recentemente ho affrontato un problema strano quando ho provato a gettare un po ‘di roba di alto livello in c ++, sovraccarico di funzioni ed ereditarietà.

Mostrerò un semplice esempio, solo per dimostrare il problema;

Ci sono due classi, classA e classB , come di seguito;

 class classA{ public: void func(char[]){}; }; class classB:public classA{ public: void func(int){}; }; 

Secondo quello che so, classB dovrebbe ora avere due func(..) , sovraccarico a causa di diversi argomenti.

Ma quando si prova questo nel metodo principale;

     int main(){ int a; char b[20]; classB objB; objB.func(a); //this one is fine objB.func(b); //here's the problem! return 0; } 

    Fornisce errori come il metodo void func(char[]){}; che è nella super class, classA , non è visibile nella class derivata, classB .

    Come posso superare questo? non è così che funziona il sovraccarico in c ++? Sono nuovo di c ++ ma in Java, so che posso fare uso di qualcosa di simile.

    Anche se ho già trovato questo thread che chiede di problemi simili, penso che i due casi siano diversi.

    Tutto ciò di cui hai bisogno è un using :

     class classB:public classA{ public: using classA::func; void func(int){}; }; 

    Non cerca la class base per func perché ne ha già trovato uno nella class derivata. L’istruzione using porta l’altro overload nello stesso scope in modo che possa partecipare alla risoluzione di overload.

    È ben spiegato ad esempio nelle risposte di questa domanda:

    Perché dovrei usare la parola chiave “using” per accedere al mio metodo di class base?

    In breve, il compilatore smetterà di cercare i metodi di corrispondenza dalle classi parent, quando trova il nome del metodo corrispondente nella class corrente, anche quando quel metodo non è compatibile. Immagino che questo consenta ad alcune conversioni di tipo automatico di funzionare in modo più logico, senza la necessità di sovrascrivere così tanti metodi della class genitore.

    Se si sostituisce una variante di una funzione nella class derivata, è necessario sovrascrivere tutte le varianti. È ansible utilizzare ciò che JLledo ha suggerito o scrivere la variante della funzione nella class derivata che chiama semplicemente la funzione della stessa class della class base.

     class classA{ public: void func(char[]){}; }; class classB:public classA{ public: void func(int){}; void func(char[]){}; }; void classB:func(char[] ch) { classA::func(ch); } 

    Devi passare l’argomento di tipo int in

     objB.func(b); //here's the problem! 

    bcs è stato sovraccaricato di argomenti int