1
class game_list
{
    public:
        string name;
        float price;
        string platform;
        string console;
        string conditin;
        bool is_portable;

};

class catridgeClass:public game_list
{
    string N_bits;
    bool is_import;
};

ゲーム リストが動的に作成され、mainPointerその動的オブジェクトを指すポインターが呼び出されます。cartridgeClassしかし、親クラスを介して s 要素にアクセスする方法について混乱していますgame_list。私はすでに試しmainPointer->N_bitsました。それはそのように動作しないようですか?申し訳ありませんが、私はC ++の初心者です。

4

4 に答える 4

1

親クラスには、その子クラスに関する情報がありません。あなたが望むことをする唯一の方法は、ドリーが提案したようにキャストすることです-私は通常眉をひそめます-または、子クラスが再定義する親クラスに仮想関数を作成します。

なぜキャストに眉をひそめるのですか?ほとんどの場合、オブジェクトからデータを取得するためにオブジェクトを動的にキャストするのは、コードの書き方がよくありません。コードの残りの部分がどのように見えるかはわかりませんが、共有機能を介してこれを記述するより良い方法があると思います。たとえば、これらのアイテムを使用して文字列情報を表示するとします。そのような場合、それを記述する最良の方法は、仮想関数を使用することです。

class game_list
{
    public:
        string name;
        float price;
        string platform;
        string console;
        string conditin;
        bool is_portable;
        public virtual void PrintInfo() 
        { 
            cout << "name: " << name << ", price: " << price; //etc
        } 

};

class catridgeClass:public game_list
{
    string N_bits;
    bool is_import;
    public virtual void PrintInfo()
    {
        game_list::PrintInfo();
        cout << ", bits: " << bits << ", is import: " << is_import;
    }
};

mainPointer->PrintInfo() を呼び出すと、基になる型に関係なく正しい情報が出力されるようになりました。それは「オブジェクト指向方式」です。

于 2013-05-17T21:39:01.607 に答える