У меня есть класс, унаследованный от абстрактного базового класса.Полиморфизм: доступ к переменной унаследованного класса
class CStateBase
{
friend class CApplication;
friend class CGraphics;
virtual int Update() =0;
};
class CStateTitle: private CStateBase
{
friend class CApplication;
friend class CGraphics;
CApplication *f_App;
int m_iR;
int Update();
CStateTitle(CApplication *App);
~CStateTitle();
};
В методе другого класса, CStateTitle динамически распределяется в указатель CStateBase. Однако, если я использую этот указатель для попытки доступа к переменной int m_iR, компилятор ищет переменную в CStateBase и, следовательно, делает ошибку. Если бы я мог объявить виртуальный int m_iR в базовом классе, я бы подумал, что он будет работать нормально, но по какой-то причине он не позволяет мне объявлять членов виртуальных данных. Каков рекомендуемый способ обойти эту проблему? Спасибо за любую помощь.
Скорее всего, вам нужен виртуальный деструктор в базовом классе, см., Например, Саттерс [Виртуальность] (http://www.gotw.ca/publications/mill18.htm). –
Каким образом обычная не виртуальная переменная-член не решает вашу проблему? –