(заранее извините вопрос о нобе)
У меня есть 4 класса:
class Person {};
class Student : public Person {};
class Employee : public Person {};
class StudentEmployee : public Student, public Employee {};
По существу Person
- это базовый класс, который непосредственно подклассифицирован как Student
, так и Employee
. StudentEmployee
использует множественное наследование для подкласса как Student
, так и 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};
Когда я использую массив Person
, базовый класс, я могу поместить Person
и все его подклассы внутри этого массива. За исключением StudentEmployee
, учитывая причину неоднозначного базового класса.
Учитывая, что StudentEmployee
гарантированно имеет все методы и атрибуты Person
, StudentEmployee
считается подклассом Person?
- Если да, то почему компилятор не позволяет мне присваивать объект переменной типа своего суперкласса?
- Если нет, почему бы и нет; и что было бы правильным путем для этого?
Приветствия
РЕДАКТИРОВАТЬ: Упреждающий, этот вопрос НЕ совпадает с одним из следующих:
Полиморфизм связывает наследование
Наследование, преследующее полиморфизм в С++?