Давайте предположим, что у нас есть базовый класс BaseЛучший способ передать несколько классов ребенка в C++
class Base{
virtual double GetNumber();
}
и несколько дочерних классов (давайте назовем их «A», «B» и «C»), которые выглядят например
class A : public Base{
double GetNumber(){return 1;};
}
Теперь у меня есть еще один класс, который должен получить дочерний класс через функцию. Это выглядит так:
class Caller(){
Base* b;
void SetB(Base* b){this->b = b;};
}
Я только передаю указатель, чтобы предотвратить нарезку объектов. Однако от того, где я хочу, чтобы вызвать функцию она выглядит следующим образом:
std::vector<Caller> cVec; //multiple Caller object in here
for (std::vector<Caller>::iterator it = cVec.begin(); it != cVec.end(); ++it){
A child;
//Some manipulation of child
cVec.SetB(&child);
}
Указатель решает проблему объекта нарезка, однако я не хочу, чтобы все объекты идентификации вызывающего абонента, указывающие на того же ребенка. Я мог бы решить это, создав еще один вектор с несколькими экземплярами дочерних классов, но мне интересно, есть ли лучший способ сделать это?
Редактировать 1: Детский объект должен создаваться только в цикле for и управляться объектом Caller.
Непонятно, что вы пытаетесь сделать. Ваш код ошибочен, так как A - это локальная переменная, которая исчезнет после существования цикла for. –
'class Caller() {};' Я никогда не видел функцию/класс, объявленную таким образом – Raindrop7
Это похоже на подлинный вопрос с некоторыми разумными усилиями, чтобы понять проблему с вашей стороны, но, как вы выразились, это действительно неясно, что это. Если вы не хотите, чтобы некоторые указатели указывали на один и тот же объект, просто не указывайте их на один и тот же объект? –