C ++: множественное наследование с полиморфизмом

(простите заранее вопрос нуба)

У меня 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 считается подклассом человека?

Если так, почему компилятор не позволяет мне назначать объект переменной типа его суперкласса?Если нет, то почему бы и нет; и какой будет правильный способ сделать это?

ура

РЕДАКТИРОВАТЬ: преимущественно, этот вопрос не совпадает с одним из следующих:
полиморфизм относится к наследованию
Наследование, испорченное полиморфизмом в C ++?

Ответы на вопрос(2)

Ваш ответ на вопрос