21

次のクラスがあるとしましょう。

class A {
 public:
  virtual void foo() {
    bar();
  }

 protected:
  virtual void bar() {
    // Do stuff
  }
}

class B : public A {
 protected:
  virtual void bar() {
    // Do other stuff
  }
}

Bのインスタンスがあり、fooメソッドを呼び出すと、どのbarメソッドが呼び出されますか?そして、このコンパイラは固有ですか?

ありがとう

4

2 に答える 2

27

のインスタンスがある場合、A::fooが呼び出されます。インスタンスがポインタを介して参照されるか、基本クラスへの参照を介して参照されるかは問題ではありません。これに関係なく、のバージョンが呼び出されます。これが多態的な呼び出しを可能にするものです。動作はコンパイラ固有ではありません。仮想関数は、標準に従ってこのように動作します。B::barBB

于 2012-12-27T01:17:16.113 に答える