Как использовать унаследованную переменную в C++
У меня есть вопрос к унаследованным переменным. Части моего исходного кода:
class Piston{ //abstract class
... //virtual functions
};
class RectangularPiston: public Piston
{
... //non virtual implementation of the Piston functions
bool setGridSize(...) //this function doesn't exists in the Piston class
{
...
}
}
class Transducer{ //abstract class
... //virtual functions
protected:
Piston *m_piston;
};
class RectilinearTransducer: public Transducer
{
... //non virtual implementation of the Piston functions
bool setGridSizeOfPiston(...)
{
return m_piston->setGridSize(...); //doesn't work
}
}
RectilinearTransducer содержит m_piston, который всегда является RectlinearPiston! Но m_piston наследуется классом Transducer, и я не могу использовать функцию setGridSize().
сообщение об ошибке: ошибка C2039: "setGridSize": нет элемента "поршень"
Функция setGridSize не существует в классе Piston...
Как я могу решить эту проблему? Должен ли я перезаписать переменную m_piston, как я могу сделать это с виртуальными функциями? Переменная m_piston существует как Piston* m_piston, потому что я унаследовал ее от класса Transducer.
Спасибо за помощь
2 ответа
Если вы не можете сделать setGridSize
виртуальная функция в родительском, то вы можете добавить функцию, которая просто m_piston
в RectangularPiston*
затем вызвать эту функцию, когда ваш класс должен ссылаться на m_piston
,
RectangularPiston* getRecPiston() {
return static_cast<RectangularPiston*>(m_piston);
}
bool setGridSizeOfPiston(...) {
return getRecPiston()->setGridSize(...)
}
Вам нужно сделать setGridSize
виртуальная функция Piston
(или чисто виртуальный или иным образом).
например
class Piston {
protected: (or public)
virutal bool setGridSize(..) = 0;
...