他のクラスのメンバ変数に値を代入 – プログラミング – Home

他のクラスのメンバ変数に値を代入
 
通知
すべてクリア

[解決済] 他のクラスのメンバ変数に値を代入


gots
 gots
(@gots)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

<VC++, MFC>

あるクラスで、他のクラスのメンバ変数に値を代入するにはどうすればよいのでしょうか??

例えば。。。

class CMainDlg : public CDialog // Mainダイアログ

class CSubDlg : public CDialog // Subダイアログ
があって、

CMainDlg::OnInitDialog() で
 CSubDlg Dlg;
 Dlg.DoModal();
で、Subダイアログを呼んでいます。
ここで、EditBoxに値を入力させて、その値を、
CSubDlg::OnOK() の中で CMainDlg のメンバ変数に格納したいのです。

すごい初歩的な質問だと思いますが、ご教授お願いいたします。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

CSubDlgの構築子か何かでCMainDlgのインスタンスへのポインタやリファレンスを渡しておけば,
CSubDlg::OnOKでCMainDlgのインスタンスを扱えます。
ex)
class CMainDlg;
class CSubDlg : public CDialog {
CMainDlg & MainDlg_;

public:
CSubDlg (CMainDlg &);
};

// 実装
CSubDlg::CSubDlg (CMainDlg & MainDlg) : CDialog(), MainDlg_(MainDlg)
{
/* ... */
}

// 利用
CSubDlg Dlg(*this); // thisはCMainDlg * const
Dlg.DoModal();

> すごい初歩的な質問だと思いますが、

この言葉は不要です。
「初歩的だと思うなら自分で調べろ」という言葉が返ってくる元になります。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

こちらでいろいろな方法が挙がっています。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200211/02110036.txt

ただ、この場合、CSubDlg::OnOK()からCMainDlgの変数に設定するのではなく、
CMainDlgの方が、CSubDlgのメンバ変数を取って来る方が簡単だと思いますが。

 CSubDlg Dlg;
 if (Dlg.DoModal()==IDOK) {
m_data = Dlg.m_data;
}


返信引用
gots
 gots
(@gots)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

YuOさま
ありがとうございます。できました。
が、この部分の意味が理解できていないので、ご教授いただけると幸いです。
CSubDlg::CSubDlg (CMainDlg & MainDlg) : CDialog(), MainDlg_(MainDlg)

dairygoodsさま
過去ログにあったんですね。ありがとうございます。
現在メンバ変数で取ってくる方法でやっていて、あとAppクラスに持つのというのも
考えましたができれば違うやり方が知りたかったんです。
言葉が足りませんでしたね。例がダイアログだったからいけなかったですかね。
普通のクラスの間での参照の仕方も合わせて知りたかったので。。。

クラスだからと妙にむずかしく考えていましたが、ようは関数のポインタ渡しと
同じコト、ということなのでしょうか。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

横レス失礼

>CSubDlg::CSubDlg (CMainDlg & MainDlg) : CDialog(), MainDlg_(MainDlg)

CSubDlg のコンストラクタで、
明示的に CDialog のコンストラクタを呼び、MainDlg_ を MainDlgで初期化する。
という意味。

「コンストラクタ初期化子」とか「初期化リスト」とかいいます。


返信引用
gots
 gots
(@gots)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

PAI さま
ありがとうございました。「初期化リスト」なんか聞いた(見た)ことあります。
その辺で検索かけて、もうちょっと自分で調べてみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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