Скажем, у меня есть базовый класс Base:C++ Есть ли способ хранения набора производных классов в одном векторе базового класса и по-прежнему доступ к их членам?
class Base
{
}
и производный классы Derived1
class Derived1: Base
{
int a;
}
Теперь у меня есть вектор:
std::vector<Base*>vec;
И давайте скажем, что я приложил это с указателем на экземпляр производного класса, и теперь я хочу получить доступ к его члену a. Давайте также скажем, что я знаю, что преобразование класса I является фактически Derived1, а не другим производным классом.
Я читал другие ответы, говоря, что бросать классы в вектор в производные классы - плохая идея, поэтому я хочу этого избежать. Я также хочу избежать создания отдельного вектора для каждого производного класса, так как через некоторое время он станет очень грязным. Если у кого-то есть предложение, которое противоречит моему подходу к проблеме вместе, но все же позволяет мне легко управлять многими производными классами, я был бы рад услышать это.
Другие предложили использовать интеллектуальные указатели в векторе, но я не понимаю, как это позволяет мне получить доступ к членам производного класса. Если это хороший подход, я был бы признателен, если бы кто-нибудь мог это объяснить.
Сделать 'зЬй :: вектор', легко, как это. Нет глупых указателей, без литья, без путаницы. –
Если у вас есть 'Base *' и вы * знаете *, это фактически 'Derived * '(и нужно рассматривать его как таковой), тогда у вас есть проблема с дизайном, поэтому приведение в малейшее количество из ваших забот. Используйте виртуальные интерфейсы, если вам нужен полиморфизм, и если вы этого не сделаете, вам не понадобится «Base *» либо в первую очередь. – syam