別のクラスからドキュメントクラスのポインタを取得したい – 固定ページ 2 – プログラミング – Home

別のクラスからドキュメントクラスのポイ...
 
通知
すべてクリア

[解決済] 別のクラスからドキュメントクラスのポインタを取得したい

固定ページ 2 / 2

はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

すいません、またすこしわからなくなってしまったのでもう一つだけお聞きしたいのですが、

今、CDocumentから派生したCTestDocクラスと、どこからも派生してないCAクラスの二つがあったとします。そして、
その二つのクラスが次のようになってたとします。

TestDoc.hの中身    A.hの中身
#includeA.h //#includeTestDoc.hにすると2重定義に
                             //なってしまうからインクルードできないはず

class CTestDoc : CDocument class CA
{ {
//メンバ関数 //アクセス関数
void MKansu() int GetAbc();
void SetAbc(int v);

      ・                      ・
      ・                     ・
//メンバ変数                      //メンバ変数
private private
CA m_a; int m_abc;
int m_test;
      ・                     ・
      ・                     ・
} }

CTestDocクラスでCAクラスのオブジェクトをメンバ変数として宣言している場合です。
ここで、もし、「CTestDocクラス」のメンバ関数MKansu()の実装の中で、CTestDocのメンバ変数m_testの値をCAクラ
スのメンバ変数m_abcに入れたいとしたらどうするのでしょうか。やっぱり、

m_a.SetAbc(m_test);

でしょうか。


返信引用
重
 重
(@重)
ゲスト
結合: 24年前
投稿: 84
 

> CTestDocクラスでCAクラスのオブジェクトをメンバ変数として宣言している場合です。
> ここで、もし、「CTestDocクラス」のメンバ関数MKansu()の実装の中で、CTestDocのメンバ変数m_testの値をCAクラ
> スのメンバ変数m_abcに入れたいとしたらどうするのでしょうか。やっぱり、
>
> m_a.SetAbc(m_test);
>
> でしょうか。
動作としてはそれで良いはずです。

Set??関数等を用いる場合には、はまちさんが良いと思われる方法で統一して置けば問題はないと思います。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

クラスの実体をメンバ変数に持つ場合には事前にヘッダファイルの include が必要ですが、
ポインタをメンバに持つ場合は必ずしもヘッダを include する必要はないです。

// a.h
#ifndef _A_H_
#define _A_H_

class CB; // これが必要

class CA
{
private:
CB *m_pB; // ポインタなので OK
};

#endif

という風にすれば a.h で b.h を include しなくても CB へのポインタをメンバに持つことが出来ます。
後は a.cpp のほうで b.h を include しておけばいいです。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

重さん、それから、kazumaさん、お返事ありがとうございました。kazumaさんが言われたのは、重さんが言ってた
マクロのことと同じなのでしょうか。重さんが、書いてくれたマクロの例にとてもよく似ていたのでそんな気が
しました。マクロの2重定義回避の方法はまだ調べているところなのでわからないところだらけなのですが、
重さんの方法も、kazumaさんの方法も、意外に簡単そうなのでびっくりしました。はじめ重さんが、「書籍では
見かけない」とおっしゃっていたので、とても難しいことに踏み込んでしまったのかとしり込みしてたのですが、
私にもできなくもないような気がしてきました。早速、試してみます。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました