(perdón la pregunta Noob por adelantado)C++: La herencia múltiple con polimorfismo
tengo 4 clases:
class Person {};
class Student : public Person {};
class Employee : public Person {};
class StudentEmployee : public Student, public Employee {};
Esencialmente Person
es la clase base, que son subclases directamente por tanto Student
y Employee
. StudentEmployee
emplea herencia múltiple a la subclase Student
y 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};
Cuando uso una serie de Person
, la clase base, que puede poner Person
y todas sus subclases dentro de esta gama. Excepto por StudentEmployee
, dada la razón de clase base ambigua.
Dado que StudentEmployee
garantiza tener todos los métodos y atributos de Person
, ¿es StudentEmployee
considerada una subclase de Persona?
- Si es así, ¿por qué el compilador no me permite asignar un objeto a una variable del tipo de su superclase?
- Si no, ¿por qué no? y ¿cuál sería la forma correcta de lograr esto?
Saludos
EDIT: preventivamente, esta cuestión no es lo mismo que cualquiera de los siguientes:
polymorphism relates inheritance
Inheritance mucking up polymorphism in C++?
Pero, obviamente, llamar a un nuevo tipo de ese tipo casi con seguridad generará una pérdida de memoria – Falmarri
+1 para el corte. Y por si acaso bguiz no lo sabía, esto también podría ser Person * ppl [] = {& pat, & sam, & em, &sen }; - hay una ligera diferencia en la administración de la memoria de estas dos opciones. – Michael
@Falmarri: ¿Por qué? Aún tienes la matriz de punteros. – Job