- ベストアンサー
至急教えてください(VC++)
VC++の質問です。 クラスA : クラスBを宣言 B b; クラスB : クラスCを宣言 C c; クラスC クラスCからクラスBでpublicで宣言されている関数を読み出すには どうしたらよいのでしょうか。 自分を宣言したクラスのポインタを取得する関数とかがあるのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
クラスCのコンストラクタでクラスBのアドレスを 渡せばいいのでは。 ClassB b: ClassC c(&b); ClassC::ClassC(ClassB *pB) { m_pB = pB; } とすれば、 クラスC内で m_pB->XXXX(); とコールできるはずです。
その他の回答 (3)
- sueoka
- ベストアンサー率38% (24/62)
#1のsueokaです これまた少し違うかもしれませんが・・・ ---------------------------------------- #include <stdio.h> class B { pubic: static int func() { return (1); }; }; class C { public: void start() { printf("%d\n", B::func()); }; }; void main() { C *c = new C(); c->start(); delete(c); } ---------------------------------- こんな方法も在ります。 ただまぁ、これもC以外からもこの関数が呼べるので、 kuuchさんの求めているのとはちょっと違うかなぁ。 参考までにどうぞ・・・ 少なくとも、宣言元を取得する関数はないと思います。 #2のKanKouさんのように「呼出し元は俺様だ!」と 宣言したクラスに渡すのが一番スマートかな。
お礼
2回も回答ありがとうございます。 KanKouさんの方法でとりあえずはうまくいきました。 いろんな方法があるようでびっくりしています。 時間に余裕ができたら、いろいろ勉強したいと思います。
- mkii
- ベストアンサー率40% (43/105)
こんな感じでいいですか? class B; class C { public: B *m_pB; startC(); }; class B{ public: B(); start(); fromC(); C c; }; B::B() { c.m_pB = this; } B::start() { c.startC(); } B::fromC() { } C::startC() { m_pB->fromC(); } void main() { B b; b.start(); }
お礼
回答ありがとうございます。 KanKouさんの方法でとりあえずはうまくいきました。 今、ほんとに時間がない状態なので、余裕ができたらmkiiさんの方法も試してみたいと思います。
- sueoka
- ベストアンサー率38% (24/62)
クラスA,B,Cは継承ではないんですよね。 static publicとか言う関数でもないんですよね。 それだったら、クラスCの中でクラスBを作成(宣言)して、 それに対して関数を呼ぶしかないんじゃないのかなぁ。 ちょっと自身無いですけど。
補足
その方法はすでに試してます。 うまく動かなくて、クラスBをクラスAでじゃなく、グローバルで宣言しちゃったんですけど、それじゃあ、カプセル化にならないかなって思ってます。 グローバルだと、どのクラスからもアクセスできるようになっちゃうんですよね。
お礼
ありがとうございます。 上記の方法でうまくいきました。