-2

主にポリモーフィズムの演習である単純なチェスゲームを作成しようとしています。抽象クラスchessmenを作成し、そこからチェスの駒を継承することになっています。ここで、すべてのピースに対して、本質的に同じことを行う 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ではありません。

4

1 に答える 1

0

C++ へようこそ: 初期化されていない値を参照すると、未定義の動作が発生します。biT参照される前に初期化されません。これを行う 1 つの可能な方法は、作成時にどの色にしたいかをオブジェクトに伝えることです。また、最終的には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 に答える