クラス間での変数の取得方法

[戻る]
toke 2010/05/28(金) 14:56:30
クラスウィザードでtest1とtest2と言うクラスを作りました。
main からtest1の変数を取得してくる時は

---test1.h---
BOOL flag = TRUE;

---main.cpp---
test1 xxx;
BOOL kekka = xxx.flag;


で取得してこれるのですが、
以下のように作成したtest2クラスから、test1クラスの変数を取得することが出来ませ
ん。

---test2.cpp---
test1 xxx;
BOOL kekka = xxx.flag;


コンパイルは通るのですが動かしてみると
test2のkekka の中は何も入っていないのです。
この場合、どのように取得してくるのでしょうか?

仲澤@失業者 2010/05/28(金) 15:08:07
---main.cpp---
test1 xxx;//←(1)この実体(インスタンス)と
BOOL kekka = xxx.flag;
---test2.cpp---
test1 xxx;//←(2)この実体(インスタンス)は、別のものです。
BOOL kekka = xxx.flag;

(1)のxxxと、(2)のxxxは「同じ型=test1」から「同じ名前=xxx」で作成された、
2つの別の実体なのです。

toke 2010/05/28(金) 16:20:14
インスタンスのハンドルを使うと言うことなんでしょうか?
実体の合わせ方がわからず、調べてみたのですがまだ理解できておりません。
何かヒントなど頂けると助かります・・・

仲澤@失業者 2010/05/28(金) 19:14:06
test2.cppの中の何らかの関数の中で、メインに実体のあるxxxを使うためには、
「それ自体」を渡す必要があります。
ポインタで渡す方法と参照で渡す方法があります。

---main.cpp---
int main(・・・)
{
   test1 xxx;//←(1)
   Test2_no_Function( &xxx); // xxxの実体のポインタを渡す
}


---test2.cpp---
void Test2_no_Function( test1 * ptr_xxx)
{
   BOOL kekka = ptr_xxx->flag; // (1)のxxxのflagを取得
}

ITO 2010/05/28(金) 20:47:33
 簡単なコンソール形式のプログラムを作って動かしみたら?
いまのプログラムがわかりにくいのならもっと簡単にしてみるのも手です。
 あとC++の本を買ったほうがいいですね。
大学?、会社?にUNIX系の本があるならそれでもいいと思います。
(基本は一緒です。)
VC++のバージョンは?
VC6.0だったら、ちょっと変わるかも知れませんね。

wood 2010/05/31(月) 07:00:13
質問者の方へ
---main.cpp---  と  ---test2.cpp---  は 同一EXE内で動作する前提の
質問と受け取って良いのでしょうか?

違うと言うのであれば、回答の内容も変わってくると思われますよ

toke 2010/05/31(月) 10:23:34
[[解決]]
>中澤さん
ポインタ渡しの方法で解決することが出来ました
ありがとうございました

GetMainWnd()などで親のハンドルを取得して
そこから変数を取得するのかな?と考えており、
ずっとその辺りを調べていたんですが全然検討違いだったようですね


>ITOさん
VisualStudio2005でした
C++の本は持っているのですが、自分に合ってないのか
期待する内容が載っていないんです


>woodさん
同一EXE内で動作するものです

PATIO 2010/05/31(月) 11:02:13
既に終わっていますが。

> VisualStudio2005でした
> C++の本は持っているのですが、自分に合ってないのか
> 期待する内容が載っていないんです

本の問題なのか、単純に理解が足りないのかが文章からでは
読み取れないので何ともですが、
クラスとインスタンスに関する概念に関しては
ハンドルとかそういうレベルの話では無いので
理解の方なのではと言う気がしています。

ハンドルが絡むのはクラスのインスタンスと言うよりも
OSとか管理部を通した時の個体の識別の問題ですよね。
単純なクラスインスタンスなのであれば、ハンドルの概念は
必要無いと思います。そうなるとポインタや参照のように
既に存在するインスタンスを指し示す物でやり取りする事に
なると思います。
あと、VC++の入門書とC++言語の入門書では内容が違います。
C++言語の入門書をお持ちで無いのであれば、
C++言語の入門書で勉強される事をお勧めします。

純粋なC++言語の入門書であれば、開発環境の違いは殆ど
関係有りません。
VisualStudio2005ならC++への準拠も大丈夫そうですし、
クラスの概念等のオブジェクト指向の部分についてみっちり
勉強すると良いと思います。

PATIO 2010/05/31(月) 13:10:30
あと、C++の勉強をするつもりなら
ウィザードを使うのはあまりよくない気もします。
ウィザードが対応していない記述は出来ないし、
勝手に吐き出されたソースでは一つ一つの意味を
理解しないまま進んでしまいそうです。

最初はコンソールプログラムでウィザードを使わずに
自分の手でクラスの定義を行った方が良いような気もします。
VisualStudio特有の部分を覚えるのはそれからでも良いと思いますし、
C++言語の部分がぐらついている状態でVisualStudio特有の部分に
入り込みすぎるとC++言語のレベルで理解しておくべき内容が
置き去りにされてしまいそうな気がします。

PATIO 2010/05/31(月) 13:14:10
別にウィザードを使わなくても
ヘッダーファイルとソースファイルの記述が正しければ、
VisualStudioの方で解析してVisualStudio上では
メソッド等のインテリセンスもちゃんと動くはすです。
ウィザードは決まりきった定型部分をIDEが提示してくれる事で
開発効率を上げるための物なので勉強の段階では自分で
コードを記述してヘッダーファイルやソースファイル上で
どのように記述するのかまで含めて勉強した方が良いと思います。

古いスレッドには追加発言できません。