Я пытаюсь использовать абстрактный тип класса в качестве переменной-члена в моем определении класса, но каким-то образом у него есть некоторая проблема. Вот абстрактный тип класса:
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, ....);
}
Кто-нибудь знает, что не так?