C++の怪

 ちょっと自分のソースを見ていて思ったこと。




class A
{
   ...
   int timer;
   ...
};

class A2 : public A
{
   ...
   int timer;   // 基底クラスのメンバ変数と
           // 同名で宣言。エラーにはならない模様。

   ...

   void Test();
};


void A2::Test()
{
   // どっちに代入されるのか?
   timer = 1;

   // 出力してみる
   printf( "%d / %d\n", ((A*)this)->timer, this->timer );
};

 こんな感じで

継承クラスの方になぜか継承元と同名のメンバ変数がある場合。

どうなるのかなと。



 ちなみに、答え(上記の出力)


0 / 1
になります。*1

 …まぁ、よくよく考えてみると当たり前なんですけれども(汗)

あくまでも「A2のthis」からの「timer」なわけですからね…(苦笑)




*1:共に初期値は0として