OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.109273
  • 閲覧数56
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

VC++の質問です。

クラスA : クラスBを宣言 B b;

クラスB : クラスCを宣言 C c;

クラスC

クラスCからクラスBでpublicで宣言されている関数を読み出すには
どうしたらよいのでしょうか。
自分を宣言したクラスのポインタを取得する関数とかがあるのでしょうか。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル4

ベストアンサー率 100% (1/1)

クラスCのコンストラクタでクラスBのアドレスを
渡せばいいのでは。

ClassB b:
ClassC c(&b);


ClassC::ClassC(ClassB *pB)
{
m_pB = pB;
}

とすれば、
クラスC内で
m_pB->XXXX();
とコールできるはずです。
お礼コメント
noname#794

ありがとうございます。
上記の方法でうまくいきました。
投稿日時 - 2001-07-26 10:19:37
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル9

ベストアンサー率 38% (24/62)

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

それだったら、クラスCの中でクラスBを作成(宣言)して、
それに対して関数を呼ぶしかないんじゃないのかなぁ。

ちょっと自身無いですけど。
補足コメント
noname#794

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


  • 回答No.3
レベル9

ベストアンサー率 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 ...続きを読む
こんな感じでいいですか?
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さんの方法も試してみたいと思います。
投稿日時 - 2001-07-26 10:22:45
  • 回答No.4
レベル9

ベストアンサー率 38% (24/62)

#1のsueokaです これまた少し違うかもしれませんが・・・ ---------------------------------------- #include <stdio.h> class B { pubic:  static int func() {   return (1);  }; }; class C { public:  void start ...続きを読む
#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さんの方法でとりあえずはうまくいきました。
いろんな方法があるようでびっくりしています。
時間に余裕ができたら、いろいろ勉強したいと思います。
投稿日時 - 2001-07-26 10:24:12
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ