我尝试在我的类定义中使用抽象类类型作为成员变量,但不知何故它有一些问题。这是抽象类类型:
class POINT{
public:
virtual int point_dim() = 0;
/*other virtual functions...*/
}
这是继承的类:
class POINTX : public POINT{
public:
int point_dim(){return 10;}
}
我创建了另一个类来使用POINT作为成员变量,因为POINT是一个纯虚拟类,我只能将它声明为指针:
class SPACE{
public:
POINT* m_point;
/*some other declarations*/
}
但是当我在我的主要部分使用它时,它并不像我期望的那样工作:
int main(){
POINTX *ptx = new POINTX();
SPACE space;
space.m_point = (POINT*)ptx;
//some function call use POINT as parameter(pass by reference):
func(*space.m_point, ....);
}
调用func(space.m_pint)时发生错误。但是,如果我这样做没有类SPACE,那没关系。 e.g:
int main(){
POINTX *ptx = new POINTX();
POINT *m_point = (POINT*)ptx;
//some function call use POINT as parameter(pass by reference):
func(*m_point, ....);
}
任何人都知道什么是错的?
答案 0 :(得分:2)
POINT
声明:
virtual int point_dim() const = 0;
因此,POINTX
必须有一个名为const
的{{1}}方法:
point_dim
如果没有这个,它将有两个 int point_dim() const {return 10;}
方法,一个非point_dim()
和一个const
,但纯const
,将virtual
保留为抽象。< / p>
只要POINTX
将引用带到func()
:
POINT
你可以这样称呼它:
int func(const POINT& pt)
{
const int dim = pt.point_dim();
// ...
}
另外,请注意您不需要C风格的演员阵容:
func(*space.m_point);
当你完成时不要忘记space.m_point = ptx;
!