Вероятно, просто неправильное представление о вложенных классах. Вложенный класс не волшебным образом добавляет членов в родительский класс. Это необходимо сделать вручную, например:
class Base {
public:
class Nested {
public:
int c;
};
Nested nested; // member of nested class Base::Nested.
};
Имейте в виду, что Base::Nested
, A::Nested
и B::Nested
- это разные классы. Несмотря на то, что они похожи, они не связаны вообще.
Возможно, вам нужно следующее:
#include <memory>
class Base {
private:
class Nested {
public:
int c;
};
Nested nested; // member of nested class Base::Nested.
public:
virtual int getC() const { return this->nested.c; }
};
class A : public Base {
private:
class Nested {
public:
int c = 1;
};
Nested nested; // member of nested class A::Nested.
public:
int getC() const override { return this->nested.c; }
};
class B : public Base {
private:
class Nested {
public:
int c = 2;
};
Nested nested; // member of nested class B::Nested.
public:
int getC() const override { return this->nested.c; }
};
int main() {
std::shared_ptr<Base> X = std::make_shared<B>();
return (*X).getC();
};
Каждый класс имеет своего собственного члена своего вложенного класса и возвращает c
с виртуальным геттером.