我對C++比較新,我一直在使用OpenGL開發基本的3D渲染引擎。我有以下問題: 我有一個名爲GeomEntity的類,它是所有幾何圖元的基類。我有另一個名爲DefaultMaterial的類,它是所有材質的基類(由不同類型的着色器程序組成)。因爲我將有許多類型的材質,如:ColorMaterial,TextureMaterial,AnimatedMaterial等等,我需要放置參考GeomEntity類的材料,以便從主應用程序,我可以設置任何使用該功能的材料:C++多態性和類型鑄造
void GeomEntity ::addMaterial (const DefaultMaterial *mat){
material=mat;////material is the member variable pointer of type DefaultMaterial
}
但事實是,雖然所有的這些材料是從DefaultMaterial派生的,它們都有獨特的方法,如果我將它們默認引用到DefaultMaterial的變量,我不能觸發它們。 因此,例如在主應用程序:
Sphere sphere;
....
sphere.addMaterial(&animMaterial);///of type AnimatedMaterial
sphere.material->interpolateColor(timerSinceStart);
///doesn't happen anything as the sphere.material is
/// of type DefaultMaterial that has no interpolateColor() method
我知道我可以使用模板或石膏,但我想聽到這種多態性在C++。在Java中的最佳做法或C#我真的使用這樣的:
((AnimatedMaterial)sphere.material).interpolateColor(timerSinceStart);
我認爲這與我所瞭解的託管語言最接近。 –