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