タグ

polymorphismに関するmogwaingのブックマーク (2)

  • Diksamのポリモルフィズム - K.Maebashi's はてなブログ

    以前 http://d.hatena.ne.jp/kmaebashi/20071031#p1 にメモだけ書いた件をもうちょっとちゃんと書きます。 単一継承しか考えないのであれば、ポリモルフィズムは、オブジェクトごとに関数へのポインタ*1の配列(俗に言うvtable)へのポインタを持たせればよいわけです。そのへんの話は以前こちらとか「Java謎+落とし穴徹底解明」に書いたのですが、簡単に再掲すると、下図のように、オブジェクトの先頭あたりに、メソッドへのポインタを保持したテーブルを持たせます。これがvtableで、vtableへのポインタは、オブジェクトをnewした際に設定します。 ここでたとえば getX()というメソッドのvtable上の添字は0 getY()というメソッドのvtable上の添字は1 ということさえ決まっていれば、オブジェクトのメソッドを呼び出す際は、vtableからメソッ

  • [C++] ポリシクラス | bnezの日記 | スラド

    使用者が複数の対象に同一の操作を行う状況を考える。操作に対する振る舞いが対象によって異なっているとき、この性質を多態性(polymorphism)という。C++は、動的多態性(dynamic polymorphism)と静的多態性(static polymorphism)の2つを扱う能力を備える。ポリシクラスは、静的多態性の実装手段のひとつである。 動的多態性は、実行時に解決される多態性である。C++では仮想関数が主な実装手段である。以下に例を示す。 class Base { public: virtual ~Base() throw() {} virtual void func() = 0; }; class DerivedA : public Base { public: virtual void func() { std::cout << "DerivedA" << std::end

    mogwaing
    mogwaing 2007/07/27
    静的、動的polymorphism
  • 1