VC++の質問です。

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

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

クラスC

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

A 回答 (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さんのように「呼出し元は俺様だ!」と
宣言したクラスに渡すのが一番スマートかな。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/26 10:24

こんな感じでいいですか?


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();
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/26 10:22

クラスCのコンストラクタでクラスBのアドレスを


渡せばいいのでは。

ClassB b:
ClassC c(&b);


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

とすれば、
クラスC内で
m_pB->XXXX();
とコールできるはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/26 10:19

クラスA,B,Cは継承ではないんですよね。


static publicとか言う関数でもないんですよね。

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

ちょっと自身無いですけど。

この回答への補足

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

補足日時:2001/07/25 19:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報