- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
607 :デフォルトの名無しさん[sage]:2018/04/16(月) 12:10:28.34 ID:rDfY3L1y - Java,C#などのプログラマです。
C++にC#などのインターフェースはない代わりに多重継承?できるのでそれを使うとのことで、 https://ideone.com/k7g2nn ITestAとITestBはインターフェース的なものです。 で、ITestAを実装したCBaseAを作り、CBaseAを継承しITestBを実装したCTestBを 作ったのですが、 CBaseBをnewなど実体化するとITestA::methodAがオーバーライドされておらずCBaseBは 抽象クラスになってて実体化できません。 ITestA::methodAをCBaseBでまた実装しなければいけないんでしょうか?? というかこういう場合C++ではどうすればいいのでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
610 :デフォルトの名無しさん[sage]:2018/04/16(月) 14:01:04.61 ID:rDfY3L1y - >>609
文法エラー?? https://ideone.com/k7g2nnの今回の部分と関係ないエラーは無視してください。 あくまでイメージ目的でそこらへん適当にやりました。 すみません。 https://ideone.com/QxErKY こっちですね。
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
611 :デフォルトの名無しさん[sage]:2018/04/16(月) 14:08:31.72 ID:rDfY3L1y - ちなみに、C#だとこんな感じです。
https://ideone.com/8SZhJ7
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
613 :デフォルトの名無しさん[sage]:2018/04/16(月) 14:32:34.81 ID:rDfY3L1y - もちろん、エラーなくしてコンパイルを通す方法は
>>607の >ITestA::methodAをCBaseBでまた実装しなければいけないんでしょうか?? で書いたようにすればとりあえず、コンパイルは通ります。 聞きたいのは、 C#の場合はBaseAの方で一度MethodAを宣言・定義すればいいのですが、 C++の場合は毎回CBaseAの派生クラスでmethodAを宣言して定義しなおさなければいけないのでしょうか?? それともC++では他の方法があるのでしょうか?
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
614 :デフォルトの名無しさん[sage]:2018/04/16(月) 14:34:54.92 ID:rDfY3L1y - >>612
あ、すみません。ちょっと被ってしましましたね。>>613は忘れて下さい。 >>612のコードを見てみます。
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
615 :デフォルトの名無しさん[sage]:2018/04/16(月) 15:08:36.13 ID:rDfY3L1y - >>612
そっか。純粋仮想関数じゃなくて仮想関数にするって手もありましたか。 まぁ、インターフェース的なクラスの方をいじくるのが気になりますが。 ありがとうございます。
|
- 【初心者歓迎】C/C++室 Ver.102【環境依存OK】
618 :デフォルトの名無しさん[sage]:2018/04/16(月) 17:30:50.30 ID:rDfY3L1y - >>616
>>617 色々ありがとうございます。>>617がよさそうなのでこれで行こうかなと思います。
|