c ++ прохождение элемента векторав метод объекта, требующий детей - PullRequest
0 голосов
/ 28 февраля 2019

В C ++ у меня есть Parent класс.Child1, Child2 и т. Д. Наследуют от него.Классы Child1, Child2 и т. Д. Совместно используют некоторые методы родителя и имеют свои собственные методы.

Я объявляю vector, чтобы иметь возможность добавить любого потомка Parent.

vector<Parent*> v = {new Child1(), new Child2(),...};

В зависимости от ребенка, я хочу определить другое поведение для метода BClass::someMethod(Child1* child), BClass::someMethod(Child2* child) ... Что-то вроде Шаблон посетителя .Проблема в том, что я должен передать элемент v vector в BClass::someMethod(...), и компилятор скажет, например, для метода BClass::someMethod(Child1* c1), когда передано v[0]:

Argument of type Parent* is incompatible with parameter of type Child1* 

Не могли бы вы сказатьмне, как преодолеть проблему?

1 Ответ

0 голосов
/ 28 февраля 2019

ООП решение состоит в том, чтобы добавить виртуальную функцию-член к Parent, реализовать другое поведение в переопределенных функциях-членах дочерних элементов и изменить аргумент BClass::someMethod на указатель Parent (илиссылка), и вызовите там виртуальную функцию - или полностью избавьтесь от BClass::someMethod, и используйте виртуальную функцию напрямую, если BClass::someMethod больше не имеет других функций.


PS Хранение динамических выделенийв голых указателях не очень хороший дизайн.Вместо этого рекомендуются умные указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...