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
L'output:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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!
Partager