抽象基类中的非虚方法

时间:2013-07-01 08:09:32

标签: polymorphism

我试图写一个简单的国际象棋游戏,主要是多态性练习。我应该创建一个抽象类西洋棋棋子并从中继承棋子。现在,我决定对于每一件,应该有一些方法(非虚拟),如 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,而不是bool。

1 个答案:

答案 0 :(得分: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;
}