我正在制作国际象棋游戏,当我点击一个广场时,我想知道那里有什么棋子。由于存在多于一种类型的片段,因此在Square结构中具有更多变量将是令人讨厌的。
所以我有一个名为Piece的类,它是每种类型的父类。
实施例
class Pawn : public Piece
我希望实现一个看起来像这样的Square结构:
struct Square { Piece *piece };
现在,我想像这样初始化piece变量:
piece = new Pawn(); // or what type of piece it should be.
我的问题是,通过这样做,我仍然只能访问Piece的类函数而不是Pawns函数。
我如何才能实现只有一位父母可以访问他孩子所拥有的一切的东西?
答案 0 :(得分:4)
您可以制作虚拟功能。 在基类中定义虚函数并在子类中重写它。
例如
class Base
{
public:
const char* SayHi() { return "Hi"; } // a normal non-virtual function
virtual const char* GetName() { return "Base"; } // a normal virtual function
virtual int GetValue() = 0; // a pure virtual function
};
class Child:public Base{
{
int GetValue(){
//write any code here
//return something;
}
}
答案 1 :(得分:3)
到目前为止,最好的方法是尝试避免这种情况:你能为所有子类制作Piece
制服的接口吗?如果可以做到这一点,请毫不犹豫地选择这个设计,因为我在下面描述的内容要复杂得多,也难以阅读。
由于无法通过指向基类型的指针访问派生类型的成员函数,因此需要通过以下几种方法之一解决此问题:
dynamic_cast<Derived>
- 这很简单,但非常脆弱。对继承结构的更改可能会破坏基于频繁动态强制转换的方法。