question bete sur les structures en C++
bonsoir,
j'ai le bout de code suivant et je n'arrive pas a réellement saisir la logique derrière.
J'ai deux structure A et B. B est public de A et une méthode foo virtuelle dans A et également définie dans B. J'observe que si je fais A* a= new B et que j'appelle a->foo() effectivement la fonction B::foo est appelée mais avec la valeur du paramètre par defaut de A::foo!
Quelqu'un saurait pourquoi c'est l'argument de la struct A qui est utilisé dans B?
Merci d'avance pour l'explication.
PS: j'utilise g++ version 4.7.3
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#include<iostream>
struct A{
virtual int foo(int x=1){
std::cout << "in A::foo" << std::endl;
return x*2;
}
};
struct B: public A{
int foo(int z=10){
std::cout << "in B::foo with " << z << std::endl;
return z*3;
}
};
int main(){
A *a = new B;
std::cout << a->foo() << std::endl;
return 0;
} |
L'output:
Code:
1 2 3
|
in B::foo with 1 <--- ok rentre bien dans foo de B! et z=1 et non pas 10!
3 <-------------------------renvoie z*3 mais utilise pour z la valeur 1 qui est le paramètre par défaut de A::foo! |