0

私は C++ で OOP について学習していますが、よくわからない状況に遭遇しました。

{パブリック データ メンバーの不適切なプラクティスを理解し、ポインタが NULL ではないことを前提とする}:

...

class Foo {
    public: int a = 0;
}

class Bar: public Foo {
   public: int a = 1;
}

void display (Foo * in) {
    if(in->a)
        cout << "I'M A BAR" << endl;
    else
        cout << "I'M A FOO" << endl;
}

int main() {
    Foo * BAR = new Bar;
    display(BAR); //Displays "I'M A FOO"
    return 0;
}

そして、もう少しいじくり回した後、代わりにコンストラクターを使用して非 const int a 値をそれぞれ 0 と 1 に設定し、コンストラクターから値を出力すると、値が実際には BAR で 1 に設定されていることがわかりましたが、表示関数内で 0 として評価されます。

これが意味をなさない場合は申し訳ありませんが、適切な質問をするのに十分なほどよく理解しているとは思えませんが、なぜ BAR がディスプレイ内のバーのように扱われないのか、どうすればそうできるのか疑問に思っています (可能であれば、まだ基本クラスのポインターを引数として使用します)。

4

1 に答える 1