- 締切済み
C++でCのソースを改修
Cで作成したタスクをC++で書き直したいのですが、上手くいきません。 C++に直す理由として、 関数は同じだが、オブジェクトが違うクラスが複数あるため が上げられます。 ご意見お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- koko_u_u
- ベストアンサー率18% (216/1139)
>ソースコードは諸事情により、掲載できないもので… そのまま書けって言ってるんじゃなくて、 雰囲気を伝えてほしかったのさ。日本語でいくら説明しても難しい。 それから、継承はポリモーフィズムが使いたいときにだけしして、 一部の機能を変更したい、などの場合は委譲を使いましょう。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19840)
>当初は関数をクラス化して継承を用いて改修しようと試みましたが、結局同じ関数を何度も記入することになってしまい全く効率が悪く終わりました。 同一の部分を「基本クラス」として作成しましょう。 この時「出力するアドレスが違うだけで、やってる事は同じ」の場合、コンストラクタ関数にアドレスを渡せるように作れば、オブジェクト生成時に「異なるアドレスでコンストラクト」すれば「出力アドレスごとにオブジェクトで管理」できます。 クラスは1つですから、書く関数も1つです。 で、もし「特定のポートだけ出力方法が違い、あとは一緒」と言うのがあれば、上記で作った基本クラスから派生クラスを作って、特殊処理が必要な出力用関数だけを、オーバーライドして関数を上書きしてしまえば良いのです。 また「関数を呼び出して、入出力アドレス、入出力ポートを切り替えれるように、切り替え関数を用意」しておけば、1つのオブジェクトだけをコンストラクトして「使い回し」も出来ます。 同じ関数を何個も書かなければならなくなった理由は「クラスの継承を上手に使えてない」からだと思います。 基本クラスに関数を1つ書いて、それを継承する継承クラスを派生させていけば「同じ関数は書かなくて良い筈」なんですが。
- asuncion
- ベストアンサー率33% (2127/6289)
どんなソースコードを書き直したくて、 そのときどんな風にうまくいかないのかを 具体的に書いていただく必要がありそうです。 具体的な回答は具体的な質問から生まれます。
補足
ソースコードとしては、複数のLEDやセンサなどを点灯/消灯、タイマ制御するものです。 操作方法は同じですが、対象となるLEDが異なります。 当初は関数をクラス化して継承を用いて改修しようと試みましたが、結局同じ関数を何度も記入することになってしまい全く効率が悪く終わりました。
- koko_u_u
- ベストアンサー率18% (216/1139)
>関数は同じだが、オブジェクトが違うクラスが複数あるため 状況がよくわかりません。 簡単なソースコードでもって説明するとアドバイスを得やすいでしょう。 どういう風に改変して、どう上手くいかないかも補足にどうぞ。
補足
みなさんに同じことを質問されてしまいました。 上記の方の返信を参考にしていただきたいです。 ソースコードは諸事情により、掲載できないもので…
補足
分かり易いアドバイスをいただきありがとうございました。 実はC++でのコーディングをあまりしたことがないため、完全に知識不足でした。 この改修もかねて明日からの休日にC++の勉強をしてみたいと思います。