Cette question m'a été posée lors d'une interview. Je n'étais pas capable de répondre à cela. Je ne suis pas non plus capable de l'obtenir maintenant, pour savoir pourquoi la sortie est telle qu'elle est. Voici le code:Surcharge de fonctions virtuelles
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun (int x = 0)
{
cout << "Base::fun(), x = " << x << endl;
}
};
class Derived : public Base
{
public:
virtual void fun (float x = 10.0)
{
cout << "Derived::fun(), x = " << x << endl;
}
};
int main()
{
Derived d1;
Base *bp = &d1;
bp->fun();
d1.fun();
d1.fun(1.2);
return 0;
}
La sortie du code ci-dessus est:
Base::fun(), x = 0
Derived::fun(), x = 10
Derived::fun(), x = 1.2
Le problème est: Dans le premier cas, nous disons que les deux fonctions fun() surchargé (et non pas puisque ils diffèrent dans leurs déclarations) et le plaisir de base() est appelée, mais il est impossible pour ces déclarations de plaisir() à être surchargées (car ils ne diffèrent si la déclaration contient argument par défaut ou non)
void fun(int x = 0)
void fun(float x = 10.0)
Il est impossible que ces fonctions sont surchargés.
Il semble y avoir une contradiction dans les deux cas ci-dessus.
Tout article/lien associé expliquant la situation serait très utile.
Qu'attendez-vous de la sortie et pourquoi? – NathanOliver
Dans le premier cas, la sortie devrait être, Derived :: fun(), x = 10.0, en raison du polymorphisme d'exécution. Dans le deuxième et le troisième cas, comment décidez-vous la sortie? –