如何在c ++中使用继承变量

时间:2013-08-04 01:31:05

标签: c++ inherited

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

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':没有'Piston'的元素

     

Piston类中不存在函数setGridSize ...

我该如何解决这个问题? 我应该覆盖m_piston变量,就像我可以使用虚函数一样吗? m_piston变量以Piston * m_piston的形式存在,因为我是由Transducer类继承的。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您需要使setGridSize成为Piston的虚函数(纯虚拟或其他)。

e.g

class Piston {
  protected: (or public)
     virutal bool setGridSize(..) = 0;
...

答案 1 :(得分:2)

如果您无法在父级中创建setGridSize虚拟函数,那么您可能需要添加一个简单地将m_piston强制转换为RectangularPiston*的函数,然后在您的类需要时调用此函数引用m_piston

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

bool setGridSizeOfPiston(...) {
        return getRecPiston()->setGridSize(...)        
}