从基类调用重写的方法

时间:2012-12-27 01:14:30

标签: c++ methods override

假设我有以下课程:

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方法?这个编译器是否具体?

由于

1 个答案:

答案 0 :(得分:19)

如果您有A::foo的实例,则B::bar会调用B。如果通过指针或对基类的引用引用实例并不重要:无论如何,都会调用B的版本;这是使多态调用成为可能的原因。该行为不是特定于编译器的:虚函数根据标准以这种方式运行。