Hatena::ブログ(Diary)

Alone Like a Rhinoceros Horn

2011-10-10

unite-outline の近況: C のマクロがどう展開されるかを表示するようにした

C のマクロが展開されてどうなるかを => の後に表示するようにしてみた。

Before:

f:id:h1mesuke:20111010163037p:image

 ↓

After:

f:id:h1mesuke:20111010163030p:image

上の画像より空間の利用効率が上がって情報量が増えたのがわかると思う。

do { ... } while(0) のような複数行に渡るものは最初の数行分しか表示できないけど、アウトラインってことならこんなもんで十分だろう。詳細はプレビューするなりジャンプするなりすれば確認できるわけだし。

2010-07-27

多重継承時のコンストラクタ/デストラクタの呼び出し順序2〜仮想基本クラス〜

多重継承時のコンストラクタ/デストラクタの呼び出し順序」の続き。今回はクラス階層に「仮想基本クラス」が含まれていた場合を検証。特に、

C++ Introduction - 10


(補足2)派生クラスのコンストラクタとデストラクタ

 (中略)

1. 仮想基本クラスのコンストラクタは、仮想でない基本クラスのコンストラクタより先に呼び出される。一つの仮想基本クラスに対して一回だけ呼び出しが行われる。

の部分を実際に確かめてみようと思います。

結果は以下の通り。

* DerivedAB
constructor of BaseV
constructor of DerivedA
constructor of DerivedB
constructor of DerivedAB
destructor of DerivedAB
destructor of DerivedB
destructor of DerivedA
destructor of BaseV

* DerivedXABY
constructor of BaseV
constructor of BaseX
constructor of DerivedA
constructor of DerivedB
constructor of DerivedAB
constructor of BaseY
constructor of DerivedXABY
destructor of DerivedXABY
destructor of BaseY
destructor of DerivedAB
destructor of DerivedB
destructor of DerivedA
destructor of BaseX
destructor of BaseV

* DerivedXABYC
constructor of BaseV
constructor of BaseW
constructor of BaseX
constructor of DerivedA
constructor of DerivedB
constructor of DerivedAB
constructor of BaseY
constructor of DerivedC
constructor of DerivedXABYC
destructor of DerivedXABYC
destructor of DerivedC
destructor of BaseY
destructor of DerivedAB
destructor of DerivedB
destructor of DerivedA
destructor of BaseX
destructor of BaseW
destructor of BaseV

前回同様、クラス階層とコンストラクタの呼び出し順序を上の結果を元に図示してみます。(図中の左右の位置関係はクラス宣言における基本クラスの指定順序に対応しているとします)

f:id:h1mesuke:20100726165013p:image

であることがわかります。デストラクタの呼び出し順序はちょうどこの逆になります。

2010-07-26

多重継承時のコンストラクタ/デストラクタの呼び出し順序

C++独習中。現在、まったくのよちよち歩き。トムソンガゼルの生まれ立てベイビー状態ですが、多重継承時のコンストラクタ/デストラクタの呼び出し順序がどうなるのか確かめてみたりしました。

結果は以下の通り。

* DerivedA2
constructor of BaseA
constructor of DerivedA1
constructor of DerivedA2
destructor of DerivedA2
destructor of DerivedA1
destructor of BaseA

* DerivedAB
constructor of BaseA
constructor of BaseB
constructor of DerivedAB
destructor of DerivedAB
destructor of BaseB
destructor of BaseA

* DerivedABCD
constructor of BaseA
constructor of BaseB
constructor of DerivedAB
constructor of BaseC
constructor of BaseD
constructor of DerivedCD
constructor of DerivedABCD
destructor of DerivedABCD
destructor of DerivedCD
destructor of BaseD
destructor of BaseC
destructor of DerivedAB
destructor of BaseB
destructor of BaseA

多重継承したクラスをさらに多重継承した場合、コンストラクタの呼び出し順序は以下にようになります。(図中の左右の位置関係はクラス宣言における基本クラスの指定順序に対応しているとします)

f:id:h1mesuke:20100726083430p:image

デストラクタの呼び出し順序はちょうどこの逆になります。


独習C++

独習C++