4

我对继承变量有疑问。我的部分源代码:

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 函数...

我怎么解决这个问题?我应该像使用虚拟函数那样覆盖 m_piston 变量吗?m_piston 变量以 Piston* m_piston 的形式存在,因为我由 Transducer 类继承了它。

感谢帮助

4

2 回答 2

3

您需要创建setGridSize一个虚拟功能Piston(纯虚拟或其他)。

例如

class Piston {
  protected: (or public)
     virutal bool setGridSize(..) = 0;
...
于 2013-08-04T01:39:26.630 回答
2

如果你不能setGridSize在父类中创建一个虚函数,那么你可能想要添加一个简单地转换为的函数,m_piston然后RectangularPiston*在你的类需要引用时调用这个函数m_piston

RectangularPiston* getRecPiston() {
    return static_cast<RectangularPiston*>(m_piston);
}

bool setGridSizeOfPiston(...) {
        return getRecPiston()->setGridSize(...)        
}
于 2013-08-04T01:43:03.050 回答