1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| A a;
B b;//public a
C c;//public a
D d;//private a
f1(a);//copie de l'argument
f1(b); f1(c);//copie par création d'une temporaire de type A. phénomène de slicing
f1(d); // ne compile toujours pas, d n'est pas un A
f2(b); //légitime.
f2(a); //impossible a n'est pas un B.
f3(b); //la, ca devient intéressant le paramètre ref de f3, une A const& est initialisée sur b. Il n'y a pas de slicing.
f4(a);//échec: tentative de construction d'un E temporaire, pris en référence constante, mais le constructeur est explicite.
f4(b);//possible, il y a bien un constructeur, implicite.
f4(c);//impossible, il y a bien un constructeur prenant un A, mais il est explicite.
f4(E(c)); //valide, construction explicite.
f4(d);//impossible, comme toujours, parce que d n'est pas pas un B (seul constructeur explicite). |
Partager