我对继承的变量有疑问。我的源代码的一部分:
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类继承的。
感谢您的帮助
答案 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(...)
}