Альтернатива прямому наследованию

У меня два класса класс А а также класс B. я хочу класс B иметь функциональность класс А плюс еще немного собственной функциональности. Один из очень простых способов сделать это — наследовать класс B от класс А. Но я не могу сделать это по некоторым причинам, связанным с реализацией.

Я подумал о другом решении, где я создам еще один класс класс С который будет содержать все виртуальные функции. классы А и В унаследует от класс С. класс А будет содержать реализацию виртуальных функций и класс B может также определить тот же набор функций и, следовательно, класс B будет иметь функциональность класс А.
Это оптимальное решение? Есть ли лучшие решения, чем это, кроме прямого наследования класс B от класс А?

2

Решение

То, что вы ищете, называется Состав (по наследству).

Композиция над наследованием (или принципом составного повторного использования) в
объектно-ориентированное программирование — это метод, с помощью которого классы могут
добиться полиморфного поведения и повторного использования кода, содержащий другие
классы, которые реализуют желаемую функциональность, а не через
наследование.

Это означает, что вместо того, чтобы иметь class B наследовать от class A, вы можете иметь class B содержать экземпляр class A, Это тоже хорошая практика кодирования чтобы избежать жесткой связи между class A а также class B,

11

Другие решения

Вы можете сделать это, однако, если вы создаете class C чтобы быть абстрактным базовым классом и наследовать от него класс A и класс B, тогда вы понимаете, что class A а также class B будет не связано, за исключением того факта, что они наследуются от одного и того же абстрактного базового класса. Это означает, что вы не сможете разыгрывать class B в Aи т. д. В общем случае такая реализация зависит от вариантов использования.

Например.:

Ваш class C является Person, class A является Teacher а также class B является Student, Тогда ученик не учитель, а учитель не ученик, поэтому такая реализация является действительной.

0

Вы можете использовать прокси-классы, создав два других класса PA а также PB где PB наследуется PA, Эти прокси-классы дублируют интерфейс из A а также B соответственно, но на самом деле не воплощать в жизнь их. Вместо этого они просто вызывают функции в экземпляре A а также B,

0

Класс A будет содержать реализацию виртуальных функций, а класс B также может определять тот же набор функций.

Таким образом, у вас будет дублирование кода, и это не очень хорошая вещь.

Если вы не хотите использовать наследование, попробуйте композицию.

Я объяснил состав ранее Вот.

0
По вопросам рекламы [email protected]