Как использовать унаследованную переменную в 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;
...
Другие вопросы по тегам