【发布时间】:2011-09-24 03:01:04
【问题描述】:
我尝试在我的类定义中使用抽象类类型作为成员变量,但不知何故它有一些问题。这是抽象类类型:
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*/
}
但是当我在我的 main 中使用它时,它并没有像我预期的那样工作:
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 的情况下这样做,没关系。例如:
int main(){
POINTX *ptx = new POINTX();
POINT *m_point = (POINT*)ptx;
//some function call use POINT as parameter(pass by reference):
func(*m_point, ....);
}
有人知道怎么回事吗?
【问题讨论】:
-
POINTX 类缺少 const。不需要演员表。 func() 应该将引用作为参数。
-
对任何问题的一般建议:它怎么不起作用?会发生什么,它与您期望发生的有什么不同?这个问题的具体建议:
func的定义是什么?func的第一个参数实际上是什么可能会有所不同。