備忘録::DelphiとC++のクラスの動作の違い
9月 19th, 2007
スーパークラス: 継承元の親クラス。
サブクラス: 継承した子クラス。
●コンストラクタまたはデストラクタが呼び出された場合
Delphi: スーパークラスのメソッドはinherited で明示的に書かなければ呼び出されない。
C++: スーパークラス→サブクラスの順に呼ばれる(コンストラクタ)
/ サブクラス→スーパークラスの順に呼び出される(デストラクタ)
●仮想メソッドをオーバーライドしたメソッドを、インスタンスはサブクラスだが、スーパークラスの内部から呼び出した場合
Delphi: サブクラスのメソッドが呼ばれる。
C++: スーパークラスのメソッドが呼ばれる。
●アクセス修飾子の対応
Delphi ⇔ C++
protected ⇔ private
public ⇔ public
private ⇔ protected
published ⇔ なし
●オーバーライドしたメソッドの、親のメソッドを呼び出したい
Delphi: inherited スーパークラスのメソッド名; の構文を使う。
C++: スーパークラス::メソッド名(); の構文を使う。
●クラス参照型
Delphi: ある
C++: ない(テンプレートで一部代用できるかも?)
●C++: delete文で、スーパークラス型のポインタを指定した場合
/ Delphi: スーパークラスでFreeを呼び出した場合
Delphi: サブクラスのデストラクタが呼ばれる。
C++: サブクラスのデストラクタは呼ばれない。
※C++ではスーパークラスのデストラクタを仮想関数にすると、サブクラスのデストラクタが呼ばれるようになる。
ん~む微妙すぎて、実際に試して見ないと気づかないことばっかだ。間違ってたら指摘お願いしますm(_ _)m
随時書き足す予定。
8/19修正 Thanx to ほさん
8/26追記
9/19追記及び修正

8月 19th, 2007 at 10:41 pm
>C++: サブクラスのメソッドの処理が終わった後にスーパークラスのメソッドが呼び出される。
え!?
コンストラクタの動きと混ぜていませんか?
8月 19th, 2007 at 10:58 pm
>ほさん
ほんまや!!コンストラクタとデストラクタだけだったんですね。
ありがとうございます(´ー`人)