Доступ к производным членам класса в методе базового класса

У меня есть своеобразное требование и я не смог найти решение.

class Base
{
public:
void func()
{
//access the member say 'var' of derived class
}
}
  1. В нашем случае обязательно, чтобы все производные классы из базы имели член ‘var’.
  2. Имя производного класса может быть любым.

-3

Решение

Так как все vars в производных классах должен быть того же типа, чтобы даже иметь какой-либо смысл, почему бы не просто, но это в базовом классе?

class Base
{
public:
void func()
{
// use var
}
protected: // allow derived classes to access 'var'
// and give it a value on construction
// where T == whatever type you want
Base(T v) : var(v){}
T var;
};
9

Другие решения

Вам понадобится virtual функция, которая возвращает этот член:

class Base
{
public:
void func()
{
getVar();
}
virtual int getVar() = 0;
};
class Derived : public Base
{
int var;
virtual int getVar() { return var; }
};

Лучший дизайн будет иметь var в базовом классе, так как это общий член. В противном случае, C ++ не имеет никакого механизма отражения, поэтому динамическая проверка классов так, как вам хотелось бы, исключена.

6