Я пытаюсь получить вектор различных указателей подкласса, имеющих общий базовый класс.На вектор устанавливается указатель базового класса, но все, что добавляется к вектору, не получает полной функциональности того подкласса, которым оно является.В журнале ошибок видно, что он рассматривается как базовый класс, поэтому он не получает расширенной функциональности.
Я посмотрел на множество вопросов, и люди говорят, что делать это так, как я это делаю, но по какой-то причине он не работает.
Код находится в публичном репозитории .it:
https://repl.it/@cubingminer8/inheritance-with-vectors-testing
Любая помощь будет принята с благодарностью!
edit: хорошо, так что я собираюсь использовать это для системы групп спрайтов в игровом движке c ++ sdl2.Будет базовый класс спрайтов, который имеет некоторые базовые вещи, такие как рендеринг и перемещение, в то время как любые спрайты, которые мне нужны, будут их собственными классами, наследуемыми от Sprite, у них будет свое собственное уникальное поведение, поэтому виртуальные функции будут непрактичными.Будет объект группы спрайтов, в котором могут храниться объекты, наследуемые от Sprite. Таким образом, все они могут быть визуализированы одновременно и т. Д.
Если вы когда-либо использовали pygame , тогда онпрактически идентична используемой там системе спрайтов и спрайтгрупп.https://www.pygame.org/docs/tut/SpriteIntro.html
#include <iostream>
#include <vector>
class Base {
public:
char A = 'A';
};
class Sub : public Base {
public:
char B = 'B';
};
class Sub2 : public Base {
public:
char C = 'C';
};
int main() {
std::vector<Base*> List;
List.push_back(new Sub());
List.push_back(new Sub2());
std::cout << List[0]->B << std::endl; // it should be able to print B
std::cout << List[1]->C << std::endl; // but it is being set as a base class and
// not getting the functionality of the subclass it is.
}