(pardonnez la question noob à l'avance)C++: L'héritage multiple avec polymorphisme
J'ai 4 classes:
class Person {};
class Student : public Person {};
class Employee : public Person {};
class StudentEmployee : public Student, public Employee {};
Essentiellement Person
est la classe de base, qui sont directement sous-classé par les deux Student
et Employee
. StudentEmployee
utilise l'héritage multiple pour sous-classer les deux Student
et Employee
.
Person pat = Person("Pat");
Student sam = Student("Sam");
Employee em = Employee("Emily");
StudentEmployee sen = StudentEmployee("Sienna");
Person ppl[3] = {pat, sam, em};
//compile time error: ambiguous base class
//Person ppl[4] = {pat, sam, em, sen};
Lorsque j'utilise un tableau de Person
, la classe de base, je peux mettre Person
et toutes ses sous-classes dans ce tableau. Sauf pour StudentEmployee
, étant donné la raison de classe de base ambiguë.
Étant donné que StudentEmployee
est garanti d'avoir toutes les méthodes et les attributs de Person
, StudentEmployee
est considéré comme une sous-classe de Person?
- Si oui, pourquoi le compilateur ne me permet-il pas d'affecter un objet à une variable du type de sa superclasse?
- Sinon, pourquoi pas; et quelle serait la bonne façon d'accomplir cela?
Vive
EDIT: préventivement, cette question est la même que ce soit des éléments suivants:
polymorphism relates inheritance
Inheritance mucking up polymorphism in C++?
Mais, de toute évidence, appeler nouveau comme cela conduira presque certainement à une fuite de mémoire – Falmarri
+ 1 pour le découpage. Et juste au cas où bguiz ne le savait pas déjà, cela pourrait aussi être Person * ppl [] = {& pat, & sam, & em, &sen }; - il y a une légère différence dans la gestion de la mémoire de ces deux options. – Michael
@Falmarri: Pourquoi? Vous avez toujours le tableau de pointeurs. – Job