仮想関数: キャストしてみる

#include <iostream>

using namespace std;

class Foo {
public:
  void func() {
    cout << "Foo::func()" << endl;
  }
  virtual void vfunc() {
    cout << "Foo::vfunc()" << endl;
  }
};

class Bar : public Foo {
public:
  void func() {
    cout << "Bar::func()" << endl;
  }
  void vfunc() {
    cout << "Bar::vfunc()" << endl;
  }
};

int main() {
  Foo *p;
  Bar bar;

  p = &bar;
  (static_cast<Bar *>(p))->func();
  (static_cast<Bar *>(p))->vfunc();

  return 0;
}


Bar::func()
Bar::vfunc()