C++での超単純なポリモーフィズムの例

id:syou6162とSkypeチャットしている時ににやにやしながら書いた.

#include <iostream>
using namespace std;

class Base {
public:
  virtual void message() {
    cout << "Base" << endl;
  }
};

class Inherit : public Base {
public:
  void message() {
    cout << "Inherit" << endl;
  }
};

int main() {
  Base b;
  Inherit i;
  b.message(); // これはBaseのものが呼ばれる
  i.message(); // これはInheritのものが呼ばれる
  cout << endl;

  // 派生クラスのオブジェクトをそのまま
  // 基底クラスのオブジェトに代入すると…
  b = i;
  b.message(); // これはBaseのものが呼ばれる(Inheritのものは呼ばれない)
  cout << endl;

  // ポインタを使うと…
  Base *bp1 = &b;
  Base *bp2 = &i;
  bp1->message(); // これはBaseのものが呼ばれる
  bp2->message(); // これはInheritのものが呼ばれる

  // ポインタを使わないとダメよ

  return 0;
}

【実行結果】

Base
Inherit

Base

Base
Inherit

ちょっと適当すぎたけどまぁいいや.