- PR -

JavaとC++のオーバーライドの違いついて

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-12-13 02:23
class B に method2 を実装しなければよいのでは?
そういうことではない?(^^;
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2006-12-13 02:36
本題とはまったく関係ないですが。
このコードではデストラクションが定義されていないしキャストもしていないので、正常に動いていますが、継承するクラスのデストラクタは必ずvirtualにしたほうがいいです(virtual ~Aをやれば~Bはいらなかったかも)。

コード:

...
virtual ~A();
...

virtual ~B();
...



ちいにぃさんが薦めておられますが、Effective C++, More Effective C++の内容だけは目を通されたほうがよろしいと思います。落とし穴とか危険なこととか丁寧に書いてありますから。
というか通さないと多分むしろ危険です。

# そして何でC++が嫌がられるか理解すると。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-12-13 12:50
まぁ、C++ でもその設計は不味いですよね。同じ名前のメソッドを定義するのは。
引用:

私の
>ちなみに余談ですが、JavaでC++の様な書き方をする方法はあるのでしょうか・・・。
という投稿は、virtualを付けA.hを改造する前の実行結果を
javaにさせる方法があるか、否かという事です。

が、たぶんそんな書き方しないですね。


class A の method2 を final にしたら、C++ と挙動が同じになるはずですが、不味い設計なので多分コンパイルエラーにしてくれます。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-13 13:06
引用:

囚人さんの書き込み (2006-12-13 12:50) より:

不味い設計なので多分コンパイルエラーにしてくれます。


'最終メソッド' を再定義しているので、コンパイル エラーになります。
設計的にまずいので言語仕様として禁止しているのかどうかは、設計者のみぞ知るところですが。

ちなみに、C# | VB だと 「new | Shadows つけろ!」 とか言われますよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-12-13 13:34
みなさんお返事ありがとうございます。

自分が勉強不足だという事を痛感しました。

C++だけでなく、Javaの方も勉強になりました。
やっぱりプログラミングは奥が深いですね。
 私が、モノを知らないだけですが;

ありがとうございました。

[ メッセージ編集済み 編集者: くれよん 編集日時 2006-12-13 13:37 ]

スキルアップ/キャリアアップ(JOB@IT)