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 : 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;
}
L'output:
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!