(przepraszam za pytanie noob wcześniej)C++: Wiele dziedziczenie z polimorfizmem
Mam 4 klasy:
class Person {};
class Student : public Person {};
class Employee : public Person {};
class StudentEmployee : public Student, public Employee {};
Zasadniczo Person
jest klasą bazową, które są bezpośrednio podklasy zarówno Student
i Employee
. StudentEmployee
stosuje dziedziczenie wielokrotne do podklasy zarówno Student
, jak i 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};
Kiedy używać tablicę Person
klasa bazowa, mogę umieścić Person
i wszystkie jego podklasy wewnątrz tej tablicy. Z wyjątkiem StudentEmployee
, biorąc pod uwagę powód niejednoznacznej klasy bazowej.
Zakłada się, że StudentEmployee
ma wszystkie metody i atrybuty Person
, jest StudentEmployee
za podklasę osoby?
- Jeśli tak, dlaczego kompilator nie pozwala mi przypisać obiektu do zmiennej typu jej nadklasy?
- Jeśli nie, dlaczego nie; i jaki byłby właściwy sposób, aby to osiągnąć?
zdrowie
Edycja: zapobiegawczo, to te nie jest takie samo jak jedno z następujących:
polymorphism relates inheritance
Inheritance mucking up polymorphism in C++?
Ale, oczywiście, dzwonienie w ten sposób prawie na pewno doprowadzi do wycieku pamięci – Falmarri
+1 za krojenie. I na wszelki wypadek, którego bguiz nie znał, może to być także Person * ppl [] = {& pat & sam & em, &sen }; - jest niewielka różnica w zarządzaniu pamięcią tych dwóch opcji. – Michael
@Falmarri: Dlaczego? Nadal masz szereg wskaźników. – Job