ho questo codice:chiamata della classe base
#include <iostream>
#include <string>
using namespace std;
class A {
public: void Print(int i) {cout<<i;}
};
class B : public A {
public: void Print(string s) {cout<<s;}
};
int main() {
B bInstance;
bInstance.Print(1);
return 0;
}
Questo mi dà un errore:
error: invalid conversion from 'int' to 'const char*' [-fpermissive]
che significa che sta tentando di chiamare di B Stampa senza considerare il sovraccarico ereditato. Ma, A's Print dovrebbe essere richiamabile da un'istanza B. Infatti, se cambio la chiamata a
bInstance.A::Print(1);
allora compila senza errori, ma volevo evitare di dover scrivere l'operatore nell'ambito di classe ogni volta. C'è un modo per dire al compilatore che sto cercando di chiamare il sovraccarico della funzione della classe base?
La risoluzione del sovraccarico viene eseguita prima di cercare 'A' perché ha trovato qualcosa in' B'. Usa un'istruzione 'using' per inserire' A' e partecipa alla risoluzione di sovraccarico. – chris
Se posso umilmente suggerire che l'utilità del sovraccarico è talvolta alquanto sopravvalutato. Prendi in considerazione l'uso di nomi distinti, come ad esempio 'void printInt (int i);' e 'void printString (string s);' – bobobobo