• ベストアンサー

【C++】継承しながら、インプリメント。

VB.netでは、以下のように継承しつつ実装ができると思いますが、 (1)C++ では、できないのでしょうか? (2)Java では、できないのでしょうか? Class SampleClass Inherits BaseClassHoge Implements InterfaceFoo また、 Implements は、Javaでは可能ではありますが、 C++ には「Implements」はないのでしょうか? (C++ では純粋仮想関数の集合となるアブストラクトクラスを継承するという方法しかできないのでしょうか?) .

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>C++やJavaも「ない」です。 いったい何を参照して「ない」となったんですか? C++やJavaの言語仕様にないのであれば、処理系の独自実装でもない限りありません。 (1)できないので多重継承で代用して。 (2)できます。

TeferiMage
質問者

お礼

ありがとうございます。 題意の件、特にc++で可能かを調べておりまして、googleで、 extends impliment C++ interface などなどの組み合わせて調べていたのですが、調べ方が下手なだけみたいですね。

その他の回答 (4)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

>題意の件、特にc++で可能かを調べておりまして、googleで、 extends impliment C++ interface などなどの組み合わせて調べていたのですが、調べ方が下手なだけみたいですね。 言語仕様を調べるなら言語仕様書を探すべきでは? ISO C++だと http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&ics2=60&ics3=&csnumber=50372 とか(買わないと読めませんが・・・)、JISだと http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014 とか(C++03ですが) javaは http://docs.oracle.com/javase/specs/index.html ちなみにC++でinterfaceと同等の事をするのに多重継承をすすめてるわけじゃありません。それくらいしか方法がないってだけです。

TeferiMage
質問者

お礼

ありがとうございます。 言語仕様書、少し探してみました。 この辺もよさそうです。 【C++】 http://vene.wankuma.com/ecma372/StartingState.aspx 【Java】 http://www.y-adagio.com/public/standards/tr_javalang/index.htm .

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

何となく、理念と実装を混同している気がするのですが、私の気のせいでしょうか。 元のコードをどこまで再現できるかについては、何が必要で何が必要ではないかを明確にしなければなりません。 VB.netで書かれたコードをそのままの意味でマッピングすることが必要であれば... (1) できません。ただし... VB.netが何をさすのかにもよりますが、Visual Basic.NETまたはVisual Basic.NET 2003の意味であれば、Managed C++なら同じことができます。 Visual Basic 2005以降を指すのであれば、C++/CLIで同じことができます。 言語名ではなく製品名ですが、Visual C++で同じことができるという言い方もできないわけではないかと思います。 (2) できません。 Javaは.NET Framework上で動作するプログラムを開発するためのものではないからです。 J#ならできますが、最新のVisual StudioはJ#はサポートしていません。 .NET Framework上で動作するプログラムを作成できるかどうかではなく、単にそのような継承関係を記述できるかどうかであれば、すでに回答が出ている通りです。 C++の純粋仮想関数を多重継承するのはVBのインタフェース継承と同じではありませんが、同じ理念を実装する手段としては十分役目を果たすものです。 また、C++ではTraitsやPolicyを使うことで、静的なインタフェース継承の理念を実装することもできます。

TeferiMage
質問者

お礼

ありがとうございます。 目的としては、下でいう(2)の方です。 (1).NET Framework上で動作するプログラムを作成できるかどうか (2)継承しながら、インプリメントする「関係」を記述できるかどうか 自分は知らなかったのですが、 .NET Frameworkの共通言語基盤 (CLIでしたっけ?)として、共通言語ランタイム上で動くC++と、 そうでないC++があるのですね。 Traitsで「データ型」をパラメータにしたり、 Policyで「処理」を切り替えたりというのも、 状況に応じて使いたいと思います。 .

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

オブジェクト指向の「歴史」的には「多重継承で代用」は筋がずれてるはずなんだけどね.... ちなみに Java では inherit じゃない.

TeferiMage
質問者

お礼

ありがとうございます。 (Extendsと書くのは存じ上げていたのですが、vbの例で書かせて頂いておりました) 題意の件、特にc++で可能かを調べておりまして、googleで、 extends impliment C++ interface などなどの組み合わせて調べていたのですが、検索結果からは c++ではinterfaceがない?と受け取りました。 (調べ方が下手なのかもしれませんが・・・) なので、抽象クラスで代用になるのかな?とは思っていたのですが、 「メンバ変数、メソッドの継承」と「実装して欲しいメソッド群(インタフェース)の指定」は、別物にしたいのです。 多重継承したとき、それがインタフェースとして、メソッドの実装をさせるためなのか、それとも変数・メソッドを継承させたいのか、 不明瞭な書き方はしたくないのです。 私もで多重継承での代用は避けたいと考えています。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

C++やJavaの言語仕様を調べればわかる事だと思いますけど・・・調べないんでしょうか。

TeferiMage
質問者

お礼

C++やJavaも「ない」です。 しかし「見つからない」のか、 本当に「ない」のかわかりかねます。 「継承」と「実装強制」は別の用途で使うので、 ないとは思えないのです。 .

関連するQ&A

専門家に質問してみよう