>クラス間でのクラスの共有?入力中の回答があります。ページを離れますか?※ページを離れると、回答が消えてしまいますページを離れるA回答を続ける入力中のお礼があります。13:55回答数:3件ある処理をするクラスAとログ出力のような動作をするクラスBがあります。Bクラスはメイン処理及びメインから呼ばれたクラスA両方から呼ばれます。メイン処理にて、Bクラスのコンストラクタで出力ファイルのパスを指定しその情報をメインから呼ばれたAクラスの中で呼ばれるBでも使用したいと思っています。クラスを引数として渡せば可能かもしれませんが、できればその方法は使いたくありません。"a");・・・}通報するこの質問への回答は締め切られました。16:05ポインタや参照として、引数として渡すのはスタンダードな方法ですがその場合でも、渡す回数や関数呼び出し回数等は最小限で済むように、カプセル化を十分強めておくことが大変有効です。それを踏まえたうえで、別の方法も色々とあります。clsA;この順番で確実に作るのでしたら、こういうのも考えられます。}方法2.もしAとBが意味的に十分強い関係性を持ち、セットに出来るようなケースでは、方法1のように別々に作ってからポインタを受け渡したりせずに、AがBの生成と破棄を管理してもいいでしょう。自分自身にstaticな方法でインスタンスを管理させて、どこからでもstatic関数で呼び出せるようにするといった方法も考えられます。);とでも書いておきます。);としておき後は引数として渡さなくてもどこからでもB::output_S();だけで呼び出せます。別に構造体等を作っておいて、それだけいじれば済んでしまう、という形にしてしまうのもいいでしょう。d;};同様の効果が得られます。12:51おそらくは、クラスを使うべきではないところで無理やりクラスを使おうとしています。クラスというのは、たんなる関数の寄せ集めではなくて、ある程度の自律性を持った機能の集合です。自然な使い方は、複数のインスタンスを生成して、それぞれのインスタンスごとの振る舞いを行わせるということです。ログをとるというクラスがあれば、いろいろなログを独立してとる(それぞれに独立したインスタンスが存在する)のであれば、有効です。一方で、一連のログ(早い話が、ログファイルファイっこしかない)をあちこちで収集するなら、「一連のログをとる」関数郡をひとまとめにすれば言いいのです。エラーログを追記してのようなこともできます。して「その方法は使いたくありません」と思ったのでしょうか?この回答への補足Tacosanさん回答ありがとうございます。>どうして「その方法は使いたくありません」と思ったのでしょうか?あくまで予定ではあるのですが例えばクラスAの複数の関数で呼ぶなどとなった場合やクラスCが追加になった場合など、すべてに引数として渡すのはどうかなと思ったので、ほかの方法があるならそっちの方がいいのかなと考えたからです。c#について質問があります。回答数ランキングです。職業心理カウンセラーこの専門家の回答をチェック他の専門家の回答をチェックこのQ&Aを見た人が検索しているワードクラス間C++データアクセスこのQ&Aと関連する良く見られている質問Qクラス間の変数についてよろしくお願いします。xxxを使いたいのですが、どこに宣言すれば良いのでしょうか?それともクラス間では、そのようなことは出来ないのでしょうか?ご存知の方教えてください。read}他の回答も見るQ複数クラスで共通の関数、変数の呼び出し方お世話になります。質問させて頂きたいことは複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか?1つめはあるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。2つめはクラスを作成し、静的メンバ関数、静的メンバ変数とする。ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。本当に共通して使われる関数があるなら単なるC言語的な関数で良いと思いますのでクラス化する必要は有りません。データ保持する変数と組になる関数であるならばクラス化を考えてください。日付を処理する関数と日付を保持する変数があるなら、それは1つのオブジェクトで1つのクラスとすべきです。安易なグローバル変数を避けることはコードの見通しやバグの削減につながるので良いことですが、むやみにグローバル変数をやめて逆に複雑になるなら避けたほうが良いです。言うことで私の答えは1でも2でも無い3です。変数と関数を組とした1つのクラスとして、そのクラスのインスタンスをグローバル変数として宣言してください。他の回答も見るQ複数のクラスで共通した関数を使いたい場合C++なのですが、複数のクラスで共通して使いたい関数がある場合、親クラスに共通したいメンバ関数を作り、その子として複数のクラスを作るのが良いのでしょうか?それ以外の方法だとクラスの外でstatic宣言した関数であればクラス内で使えるようでした。(static宣言しないとコンパイルエラーとなりました)しかし以下のサイトにあるように「共通関数継承のデメリット」があるようで推奨していないようです。ttp://d.hatena.ne.jp/katzchang/20110216/p1ttp://blog.jnito.com/entry/20110217/1297896355なお、自分には上記サイトの内容は難しくて理解できませんでした。「数のクラスで共通して使いたい関数がある」場合、上記サイトはどうすればいいと言っているのでしょうか?よろしくお願い致します。AベストアンサーC++で「入れ子クラス(クラスの中に別のクラスを作ること)」は、可能ですが、私は使ったことがないです。有無と、「クラスの中にクラスを作ったから」というのは、直接的な意味では関係ないです。ない)関数は、「メンバ関数」と呼ばれます。これは、「クラスによって生成されたインスタンス」にバインドされた関数です。インスタンス(ここでは、val)を定義して、val.a();というけいろでしか呼び出すことはできません。いう「インスタンスに対して」何かせよといっているので、インスタンスが指定されないと「誰に?」ということになります。いう呼び出しはできないわけです。メンバ関数は、インスタンスにバインドされない関数です。いう呼び出しができます。メンバですから)で、Aと関係なく関数を集めるという用途で使用するべきではありまん。同じファイルの中で、単純に書けば済むことです。2);}などとすればいいです。C++で「入れ子クラス(クラスの中に別のクラスを作ること)」は、可能ですが、私は使ったことがないです。有無と、「クラスの中にクラスを作ったから」というのは、直接的な意味では関係ないです。ない)関数は、「メンバ関数」と呼ばれます。これは、「クラスによって生成されたインスタンス」にバインドされた関数です。no);他の回答も見るQDWORDの実際の型は何でしょうかVC++.NETの環境です。数値を比較しようとしました。int型のようにも見えます。int型であると記述されています。int型ならこのワーニングはでないはずなのですが、なぜでるのでしょうか。DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。DWORD;"と宣言されています。Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。他の回答も見るQCStringからchar*への型変換について教えてください。CString型/char型がありましたが、CString型をchar*型に変換する方法を教えていただければありがたいです。例が載ってないのでよくわかりませんでした。目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。LPCTSTRで文字列ポインタが得られます。CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。Classリファレンス→CString→クラスメンバで確認してください。ここに処理を書く}という関数が必要なようです。他の回答も見るQc++,ある関数のクラスから別のクラスの関数を呼ぶc++で、あるクラスのメンバ関数から、別のクラスのメンバ関すを呼びたいのですが、どのようにしたらできますか?例えば、以下のような単純なコードを考えています。やりたいことは、Aのメンバ関数であるaaa()からBのクラスであるbbb()を呼びたいと思っています。その理由を少し説明します。ここでは、Aというクラスとmain関数はオープンソースコードを例えています。できるだけ、元のオープンソースコードを書き換えずに新たな機能を拡張したいと思っています。そこで、Bというクラスを使って、元のオープンソースコードに機能を拡張しようとしています。このような理由なので、bbb()という関数はaaa()という関数から呼びたいです。メイン関数には何も書き加えないのがベストです。aaa」という出力しか出ません。bbb」の出力を加えたいです。クラスAとBにある程度コマンドを追加して、解決できないでしょうか。0;}//------------------------------------------------------c++で、あるクラスのメンバ関数から、別のクラスのメンバ関すを呼びたいのですが、どのようにしたらできますか?例えば、以下のような単純なコードを考えています。やりたいことは、Aのメンバ関数であるaaa()からBのクラスであるbbb()を呼びたいと思っています。その理由を少し説明します。ここでは、Aというクラスとmain関数はオープンソースコードを例えています。できるだけ、元のオープンソースコードを書き換えずに新たな機能を拡張したいと思っています。そこで、Bというクラスを使って、元のオープンソー...続きを読むAベストアンサーAを極力触りたくないのであれば、あまりカッコよくありませんが、AがBを継承するではどうでしょうか?提示コードを以下のように書き換えれば、とりあえず期待する動きはすると思います。その他はそのまま他の回答も見るQクラスがメンバーとしてクラスを持つ時の宣言について自作クラスMainClassがMyClassというクラスをメンバー変数として持つ場合、宣言時に引数をいくつか持つコンストラクタを呼び出そうとすると構文エラーとなります。myclass(10,10);}このような宣言はできないのでしょうか。引数なしのコンストラクタは呼び出せているようです。Aベストアンサークラス定義内でメンバの初期化は出来ません。constの整数型メンバのみ初期化が認められていますが。>引数なしのコンストラクタは呼び出せているようです。MyClassのコンストラクタが呼び出されるのはMainClassのコンストラクタ内です。myclass(10,10){//...}初期設定リスト「:myclass(10,10)」を指定しなければMyClassのデフォルトコンストラクタが暗黙に呼び出されます。MyClassのコンストラクタで引数に初期値を指定しておく手もあります。int=10);//...};この場合、MainClassのコンストラクタでmyclassの初期設定リストを省略しても所期の結果が得られます。初期値を設定した場合でも初期設定を明示することをお勧めしますが。クラス定義内でメンバの初期化は出来ません。constの整数型メンバのみ初期化が認められていますが。>引数なしのコンストラクタは呼び出せているようです。MyClassのコンストラクタが呼び出されるのはMainClassのコンストラクタ内です。myclass(10,10){//...}初期設定リスト「:myclass(10,10)」を指定し...続きを読む他の回答も見るQ構造体を引数とする、クラス間のデータの受渡し方法について現在、C++の構造体を理解しようと努めていますが、どうしても理解できない点があり、なにとぞ、ご指導・ご助言のほどよろしくお願い致します。1.質問内容a.構造体を引数とする、クラス間のデータの受渡し方法について・主プロ(主クラス)側の構造体のメンバ変数を、サブプロ(サブクラス)側で更新するのに、メンバ変数を一つずつ引数として渡せば、正しく更新できるのですが、構造体を引数として渡すとコンパイルエラーになります。・どのように定義すれ場良いのかをご助言お願い致します。2.プログラムの内容を簡単に記載します。全部を記載する事は出来ないので、一部を省略して簡単に必要な所だけを記載します。*'に変換できません。キャストまたは関数スタイルのキャストが必要です。b.色々と試してみましたが、現在の私の知識ではコンパイルができません。アドバイスのほど、よろしくお願いします。現在、C++の構造体を理解しようと努めていますが、どうしても理解できない点があり、なにとぞ、ご指導・ご助言のほどよろしくお願い致します。1.質問内容a.構造体を引数とする、クラス間のデータの受渡し方法について・主プロ(主クラス)側の構造体のメンバ変数を、サブプロ(サブクラス)側で更新するのに、メンバ変数を一つずつ引数として渡せば、正しく更新できるのですが、構造体を引数として渡すとコンパイルエラーになります。Inc.Q質問する(無料)Q&A検索goo検索gooIDで新規登録・ログイン新規登録する(無料)会員の方はこちら外部サービスのアカウントで新規登録・ログインYahoo!で新規登録・ログインGoogleで新規登録・ログインTwitterで新規登録・ログインFacebookで新規登録・ログインdアカウントで新規登録・ログイン※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。会員でない方、会員になるとあなたも質問や回答ができるようになります!!親切・丁寧な回答が集まる場30分以内に回答がもらえ回答数は平均3件!匿名(ニックネーム)での投稿なので。