仮想関数

virtualをつけないとオーバライドされない、と。

#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 foo, *p;
  Bar bar;

  p = &foo;
  p->func();
  p->vfunc();

  p = &bar;
  p->func();
  p->vfunc();

  return 0;
}


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