- - PR -
JavaとC++のオーバーライドの違いついて
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-12 17:59
みなさんお返事ありがとうございます。
C++のvirtualは、何とか理解できそうです。 しかし、るぱんさんの書き込み
が、よくわかりません。もう少し詳しくお願いします。よろしくお願いします。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-12 18:21
るぱんです。
super | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-12 18:54
> クラスB内部で
> super.メソッド1 そういうことじゃなくて。 クラスAから呼び出す方法はないかって言っているんでしょ。 >JavaでC++の様な書き方をする方法 クラスAからって意味では文法上サポートされてない。 thisポインタがどのクラスのインスタンスにあたるのかを意識して書くとそういう使い方にはならんと思うんだけど。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-12 19:10
Insider.NET 会議室よりか、Java Solution 会議室の方が良かったかもしれないですね。
(C++/CLI でも、Managed C++ でも、J# でもないのですから)
Java、C#、J# ともにサポートされていませんが、VB ならば、MyClass キーワードがあります。
# Insider.NET 会議室的なことを書いてみました。
意図的に呼び出すのであれば、super (base | MyBase) で明示的に呼び出しますからね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-12 20:23
コードを書いて、「こんな動きを期待してる」と具体的に書けば伝わりやすいですね。
たぶん、final の事言ってるんじゃないのかな。 _________________ 囚人のジレンマな日々 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-12 22:20
Effective C++ 第3版 - プログラムとデザインを改良するための55項目
を一度ごらんになってみると良いと思います。 (Effective Java - プログラミング言語ガイド よりわかりやすいです) | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-13 00:28
みなさんお返事ありがとうございます。質問の仕方が悪かったせいで、皆さんを混乱させてしまったようです。これまでの話を最初から、まとめます。
当方はjavaメインでプログラムを書いています。 しかし、C++でプログラムを書く機会があり、 JavaとC++のオーバーライドの違いに気がつきました。 以降、JavaとC++によるサンプルプログラムです。 (※)以下サンプルプログラムのみです。 サンプルプログラム挙動・やりたい事・解決方法は、次の投稿で書きます。 以下 A.java
以下 B.java
以下 A.h
以下 A.cpp
以下 B.h
以下 B.cpp
以下 main.cpp
[ メッセージ編集済み 編集者: くれよん 編集日時 2006-12-13 00:30 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2006-12-13 01:00
javaサンプルプログラムの実行結果
クラスA メソッド1 クラスB メソッド2 となります。 C++サンプルプログラムの実行結果 クラスA メソッド1 クラスA メソッド2 となります。 私はC++でも、Javaと同様の実行結果を期待していたのですが、 オーバーライドに違いがある事が分かりました。 皆さんから教えていただいた解決方法は、 C++でメソッドを宣言する時に「virtual」をつける事で、 Javaと同様の動作をさせる事ができるというものです。 以下 A.h(改)
私の >ちなみに余談ですが、JavaでC++の様な書き方をする方法はあるのでしょうか・・・。 という投稿は、virtualを付けA.hを改造する前の実行結果を javaにさせる方法があるか、否かという事です。 が、たぶんそんな書き方しないですね。 ごめんなさい。変な質問しました。 本題のC++の方はvirtualで解決する事が出来ました。 ありがとうございました。 |