Je comprends les côtelettes à trancher au large des pièces sous spécifiques à chaque classe supplémentaire d'un objet, lorsque nous attribuons une super classe à une sous-classe, comme ceci:Pourquoi le découpage se produit-il exactement?
Sub mySub;
Super mySuper = &mySub;
// mySuper DOESN'T contain any sub class behaviour
et si nous avons fait:
Sub mySub;
Super& mySuper = &mySub;
// mySuper DOES contain the sub class behaviour
mais je ne comprends pas pourquoi la référence fonctionne et pourquoi l'objet ne fonctionne pas.
J'ai vu la raison est parce que sans une référence l'objet doit être copié - mais je ne vois toujours pas pourquoi cela devrait entraîner le découpage en tranches?
Je ne comprends pas non plus pourquoi la référence fonctionne. Nous pointons une référence Super au début d'un objet Sub mais le compilateur sait à quel point un super objet devrait être, donc je ne m'attendrais pas à associer la mémoire au-delà de la partie Super (correspondant au sous-classe de l'objet) à la référence Super?
_Slicing_ est un effet secondaire de _copying_. La création d'une référence ne copie pas l'objet. –
'& mySub' ... y a-t-il une faute de frappe? C'est une adresse. –
"Nous pointons une référence Super au début d'un objet Sub" - ce n'est pas vrai! (même si je remplace la référence par un pointeur) Le pointeur pointe vers le début de l'objet 'Super' contenu dans l'objet' Sub'. C'est une énorme différence lorsque vous utilisez l'héritage multiple: la valeur du pointeur dépend de la classe de base dans laquelle vous convertissez l'objet! – Csq