クラスの拡張方法の違い。
スポンサーリンク
Java だと、これで問題なく拡張できる。
public class Base {
}
public class Sub extends Base {
}
C++ の場合、以下のように書いても拡張できるようだが、親クラスと子クラスの変数に対する参照が入れ替わったりして、おかしな事になったりする。
class Base {
}
class Sub: public Base {
}
この問題を避けるためには、デストラクタ*1に virtual を付けて定義する必要があるようだ。
class Base {
Base() {
}
virtual ~Base() {
}
}
class Sub: public Base {
}
参考資料:
- C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ
- 2004年1月4日の朝日新聞のACCS関連記事について, Hi-MD, MozillaFirebirdで複数ホームページ設定, マンコ, typeid(), tdiarygrep - 今日のなんでやねん(2004-01-09)
- http://www.geocities.jp/ky_webid/cpp/language/009.html
- http://www.geocities.jp/ky_webid/cpp/language/024.html