-2

我正在尝试编写一个简单的国际象棋游戏,它主要是多态性的练习。我应该创建一个抽象类棋子并从中继承棋子。现在,我决定对于每一个棋子,都应该有一些方法(非虚拟),比如getColor()getRank() ,它们基本上做同样的事情,所以我认为在基础棋子中使用这些方法会更方便上课做作业。但我不确定是否有办法正确地做到这一点。我写了一些简单的测试代码,看看它是否工作,它编译没有问题,但输出肯定不正确。

所以我问,有没有办法做到这一点?

编辑:我的 test.cpp 代码

class Dad
{
    public:
            virtual void Void() =0;
            bool  biT;
            bool getBit(){return biT;}
};

class Kid: public Dad
{
    public:
        void Void(){}
};

int main()
{
    Dad* dP = new Kid;
    cout<<dP->getBit();
}

输出类似于 197,而不是布尔值。

4

1 回答 1

0

欢迎使用 C++:引用未初始化的值会导致未定义的行为。biT在被引用之前未初始化。一种可能的方法是告诉对象您希望它在创建时是什么颜色。此外,您最终会想要使用delete创建的那个对象new,但是这样做也会调用未定义的行为,因为您没有virtual在基类中定义析构函数。

class Dad
{
    public:
            Dad(bool b) : biT(b) {}
            virtual ~Dad() {}
            virtual void Void() =0;
            bool  biT;
            bool getBit(){return biT;}
};

class Kid: public Dad
{
    public:
        Kid(bool b) : Dad(b) {}
        void Void(){}
};

int main()
{
    Dad* dP = new Kid(false);
    cout<<dP->getBit();
    delete dP;
}
于 2013-07-01T09:10:59.900 回答