class CMesh
{
public:
CPhong* m_pForeColor;
CPhong* m_pBackColor;
CPhong* m_pForegroundColor;
int m_PositionCount;
CPoint3D* m_pPoints;
};
class CTriangleMesh : public CMesh
{
public:
int m_NormalCount;
CPoint3D* m_pNormals;
int m_TextureUVCount;
CTextureUV* m_pST;
int m_ForeTriangleCount;
int* m_pForeVertexIndex;
int* m_pForeNormalIndex;
int* m_pForeTexCoordIndex;
int m_BackTriangleCount;
int* m_pBackVertexIndex;
int* m_pBackNormalIndex;
int* m_pBackTexCoordIndex;
};
class CModel
{
public:
int m_MeshCount;
CMesh** m_pMesh;
};
定义了 CTriangleMesh* mesh=new CTriangleMesh;那么mesh->m_ForeTriangleCount可以引用,在定义 CModel* Model;Model=new CModel; Model->m_pMesh=new CMesh*[2];Model->m_pMesh[0]= mesh;
那么Model->m_pMesh[0]->只能引用CMesh类的东西,无法引用m_ForeTriangleCount等派生类的东西。。。
请教高手应该如何定义才能引用派生类的东西。。代码该如何写。。谢谢。。
參考答案:因为你定义指针数组元素类型为CMesh类的指针,自然你只能通过该指针调用CMesh对象的方法,即使实际上指向的是派生类的对象
你可以做强制类型转换,转换成派生类的指针,就可以调用派生类的方法了
当然为了程序的健壮性,你需要先检查指针所指的究竟是基本类还是派生类的对象,再做强制类型转换