• ベストアンサー

至急教えてください(VC++)

VC++の質問です。 クラスA : クラスBを宣言 B b; クラスB : クラスCを宣言 C c; クラスC クラスCからクラスBでpublicで宣言されている関数を読み出すには どうしたらよいのでしょうか。 自分を宣言したクラスのポインタを取得する関数とかがあるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • KanKou
  • ベストアンサー率100% (1/1)
回答No.2

クラスCのコンストラクタでクラスBのアドレスを 渡せばいいのでは。 ClassB b: ClassC c(&b); ClassC::ClassC(ClassB *pB) { m_pB = pB; } とすれば、 クラスC内で m_pB->XXXX(); とコールできるはずです。

noname#794
質問者

お礼

ありがとうございます。 上記の方法でうまくいきました。

その他の回答 (3)

  • sueoka
  • ベストアンサー率38% (24/62)
回答No.4

#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さんのように「呼出し元は俺様だ!」と 宣言したクラスに渡すのが一番スマートかな。

noname#794
質問者

お礼

2回も回答ありがとうございます。 KanKouさんの方法でとりあえずはうまくいきました。 いろんな方法があるようでびっくりしています。 時間に余裕ができたら、いろいろ勉強したいと思います。

  • mkii
  • ベストアンサー率40% (43/105)
回答No.3

こんな感じでいいですか? 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(); }

noname#794
質問者

お礼

回答ありがとうございます。 KanKouさんの方法でとりあえずはうまくいきました。 今、ほんとに時間がない状態なので、余裕ができたらmkiiさんの方法も試してみたいと思います。

  • sueoka
  • ベストアンサー率38% (24/62)
回答No.1

クラスA,B,Cは継承ではないんですよね。 static publicとか言う関数でもないんですよね。 それだったら、クラスCの中でクラスBを作成(宣言)して、 それに対して関数を呼ぶしかないんじゃないのかなぁ。 ちょっと自身無いですけど。

noname#794
質問者

補足

その方法はすでに試してます。 うまく動かなくて、クラスBをクラスAでじゃなく、グローバルで宣言しちゃったんですけど、それじゃあ、カプセル化にならないかなって思ってます。 グローバルだと、どのクラスからもアクセスできるようになっちゃうんですよね。

関連するQ&A