У меня есть следующая иерархия классовКак легко заменить базовый класс
class classOne
{
virtual void abstractMethod() = 0;
};
class classTwo : public classOne
{
};
class classThree : public classTwo
{
};
Все classOne, classTwo и classThree абстрактные классы, и у меня есть еще один класс, определяющий чисто виртуальные методы
class classNonAbstract : public classThree
{
void abstractMethod();
// Couple of new methods
void doIt();
void doItToo();
};
и сейчас мне это нужно по-другому ... Мне это нужно, как
class classNonAbstractOne : public classOne
{
void abstractMethod();
// Couple of new methods
void doIt();
void doItToo();
};
class classNonAbstractTwo : public classTwo
{
void abstractMethod();
// Couple of new methods
void doIt();
void doItToo();
};
и
class classNonAbstractThree : public classThree
{
void abstractMethod();
// Couple of new methods
void doIt();
void doItToo();
};
Но все неабстрактные классы имеют те же самые новые методы, с тем же кодом ... и я хотел бы, чтобы не копировать все методы, и это код к каждому неабстрактному классу. Как я мог это сделать?
Надеюсь, это понятно ...
Если они содержат один и тот же код, для чего нужны конкретные определения ClassTwo и ClassOne? – KillianDS
ClassOne имеет пару виртуальных методов, которые перегружены в ClassTwo, а также ClassThree ... ClassNonAbstract просто добавляет определение к чистым виртуальным методам. – JTom
представляет промежуточный класс с общей функциональностью или использует шаблоны для создания общего класса (шаблоны являются довольно сложными темами, вы должен будет прочитать о них, если вы их никогда не используете) – Anycorn