У меня есть вопрос к унаследованным переменным. Части моего исходного кода:
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.
Спасибо за помощь
Если вы не можете сделать 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;
...