検索結果 7 件

by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

Re: 複数のクラスに共通な関数を定義する方法を知りたいです

beatle 様

また返信が遅くなってしまい、申し訳ありません。
いろいろとありがとうございました! 大変参考になりました。修業を積んできます。
by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

Re: 複数のクラスに共通な関数を定義する方法を知りたいです

以下が関数オブジェクトによる実装です。 // implement_3.h // 内部クラスと関数オブジェクトによる実装 #include<iostream> #include<string> #include "params.h" // 動体基底クラス class MovingBody { protected: KineticParameters KinPrms; GeneralStatus Status; // 共通の安定チェック関数オブジェクトの基底 class CheckStabilityFunction { public: virtual void operator()(MovingB...
by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

Re: 複数のクラスに共通な関数を定義する方法を知りたいです

beatle様 返事が遅くなってすみません。そして、何度もどうもありがとうございます。 継承ではなく外に出しておくのがいいというのは、とても同意します。 自分でも4つほど実装を書いてみたのですが、やはり継承というのはクラスの派生に使うものなので、 “関数を追加する”ように使うのは間違っていることがわかりました。 オブジェクト指向に慣れていると当然のことなのだと思われますが、 自分はどうもそのあたりが上手く理解できないようです。 様々な状況で、色々な組み合わせで必要になるメンバ変数や構造体について、 クラスにたくさんメンバ変数や構造体を持たせておいて、そのクラスにメソッドを次々追加し、 メンバ変...
by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

Re: 複数のクラスに共通な関数を定義する方法を知りたいです

zeek様 ありがとうございます! 動作タイプを保存しておくというのは、シンプルで分かりやすいので、やはり見やすさという点では良いですよね。 変更も動作タイプを新たに追加するのと、switch文に新たな処理を書くだけなので、容易であると思われます。 単純にするため省いたのですが、それぞれのクラスは他にも様々なメンバ変数と関数を持っていて、 たとえば energy というメンバ変数に対する Suplly() という処理があり、Move() と Suplly() とクラスの対応を見ると クラス( Move タイプ, Suplly タイプ ) ClassA( Move1, Suplly1 ) Cla...
by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

Re: 複数のクラスに共通な関数を定義する方法を知りたいです

お答えいただきありがとうございます。そうですね、ClassA,ClassB や他のいくつかの Move() が共通で、 他のクラスの Move() がそれぞれ個別の実装を持つときはいけますね。 もし ClassA~C に共通な Move() { !!! } ClassD~F に共通な Move() { ??? } ClassG~I に共通な Move() { $$$ } があって、ClassJ~Z はそれぞれ個別の Move() の実装を持つ場合、 ClassBase で “virtual void Move() { !!! }” と実装し、ClassA~C は Move() を再定義しないこ...
by 笹山一郎吉岡
11年前
フォーラム: C言語何でも質問掲示板
トピック: 複数のクラスに共通な関数を定義する方法を知りたいです
返信数: 12
閲覧数: 8782

複数のクラスに共通な関数を定義する方法を知りたいです

class ClassBase { protected: int x, vel, acc; public: virtual void Move() = 0; }; class ClassA : public ClassBase { public: void FuncA() { // 実装 } void Move() { vel += acc; x += vel; } }; class ClassB : public ClassBase { public: void FuncB() { // 実装 } void Move() { vel += acc; x += vel; } }; class...

詳細検索ページへ移動する