Вы столкнулись с классической проблемой наследования алмазов.Благодаря тому, что множественное наследование работает в C ++, на самом деле существует две отдельные копии name
в Faculty
.Обычно это можно решить с помощью виртуального наследования, как это, поэтому у вас есть только один экземпляр Person
и его членов:
class Student : public virtual Person {
};
class Staff : public virtual Person {
};
Я уверен в этом случае, однако вы не хотитесделай это.Не кажется разумным предполагать, что каждый Faculty
также является Student
И Staff
членом, поэтому вы не должны представлять его таким образом.Кажется вероятным, что Faculty
всегда будет Staff
, поэтому вы можете использовать одиночное наследование для моделирования этих отношений.Затем, если необходимо, выделите (в свободные функции или отдельный класс) общий код от студента, который также необходим в Faculty
.