孫継承 | Liberty Sword

孫継承

C++で。


class A
 {
public:
 virtual void foo();
 };

class B : public A
 {
public:
 void foo();
 };

class C : public B
 {
public:
 void foo();
 };



上記のような感じの継承関係とメソッドの定義で


A* a = new C();
a->foo();


としたとき、a->foo()はどのクラスのものが実行されるのか。



僕はてっきり、class Bでvirtualをつけてないものだから、Bのfoo()が呼び出されると思ってましたよ。
実際はclass Cのfoo()がちゃんと呼び出されるんですな。

いやぁ~恥ずかしす (ノд`*)
いまだにvtableの仕組みがいまいちわからない・・・