Przepisuję aplikację za pomocą inteligentnych wskaźników C++ 11.C++ 11 inteligentne wskaźniki i polimorfizm
mam podstawową klasę:
class A {};
a klasą pochodny:
class B : public A {
public:
int b;
};
mam inną klasę zawierającą wektor z A lub B obiektów:
class C {
public:
vector<shared_ptr<A>> v;
};
Nie mam problemu z budowaniem C z obiektami klasy A (klasy bazowej), ale jak mogę je wypełnić obiektami B (klasa pochodna)?
Próbuję to:
for(int i = 0; i < 10; i++) {
v.push_back(make_shared<B>());
v.back()->b = 1;
};
I powraca kompilatora: błędach: 'klasa A' nie ma elementu o nazwie 'b'
Co próbujesz zrobić? Wygląda na to, że traktowanie A jako polimorfizmu jest złym pomysłem, ponieważ nie wykorzystasz tego. –
Nie chodzi o inteligentne wskaźniki, niewłaściwie używasz polimorfizmu. Zastąp członka publicznego b funkcją wirtualną (prawdopodobnie, pobierz i ustaw funkcje). –
Uprościliśmy klasy. W ich prawdziwej formie polimorfizm ma sens. –