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

生成もとのクラスへのアクセス

  • すぐに回答を!
  • 質問No.137405
  • 閲覧数50
  • ありがとう数2
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 14% (3/21)

clsB::vfFuncB関数ないで
clsA::lVarAにアクセスする方法がありましたら
教えて下さい。

#include <stdio.h>

class clsB{
public:
clsB(){};
~clsB(){};
void vfFuncB(){
printf("clsB::vfFuncB\n");
printf("clsA::lVarAをアクセスしたい\n");
};
};

class clsA{
public:
clsA(){};
~clsA(){};
void vfFuncA(void){
clsB oB;
oB.vfFuncB();
};
void vfSet(long lA){lVarA=lA;}
long lfGet(void) {return lVarA;}
private:
long lVarA;
};

void main(void)
{
clsA oA;
oA.vfFuncA();
}
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.5
レベル12

ベストアンサー率 40% (201/496)

>ゆえにclsAのコンストラクタを細工するのは避けたい。
clsBのコンストラクタですよね?

>また、clsBがclsAの寿命中に常に常駐するのは避けたい。
vfFuncA()のメソッド中に clsBを宣言しているので、vfFuncAの実行時に clsBはスタックに実体がとられ、vfFuncA終了と共に解放されるので常にメモリをとられているわけではありません。

>がてるのです。何処が悪いの?
clsBの構造を先に定義しないとだめなんじゃないでしょうか。
また、以下のコードは、
 void vfFuncB(clsA* oB){
  oB.vfSet(123);
 };
ポインタで渡されているから、oB->vfSet(123); ですね。
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル9

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

こんにちわ 以前にも似たような質問があり、僕も回答させてもらいましたので、 それを紹介しておきます。 頑張ってください! ...続きを読む
こんにちわ

以前にも似たような質問があり、僕も回答させてもらいましたので、
それを紹介しておきます。

頑張ってください!
補足コメント
nakashi

お礼率 14% (3/21)

実際にはclsAはATLのCOMのメソッドです。
ゆえにclsAのコンストラクタを細工するのは避けたい。
また、clsBがclsAの寿命中に常に常駐するのは避けたい。

ところで
(10) : error C2079: 'oB' が 未定義の class 'clsB' で使用されています。
(11) : error C2228: '.vfFuncB' : 左側がクラス、構造体、共用体ではありません。
がてるのです。何処が悪いの?

#include <stdio.h>

class clsB;
class clsA{
friend class clsB;
public:
 clsA(){};
 ~clsA(){};
 void vfFuncA(){
  clsB oB;
  oB.vfFuncB(this);
 }
 void vfSet(long lA){lVarA=lA;}
 long lfGet(void) {return lVarA;}
private:
 long lVarA;
};

class clsB{
public:
 clsB(){};
 ~clsB(){};
 void vfFuncB(clsA* oB){
  oB.vfSet(123);
 };
};

// COMの呼び出し側はclsBの存在を知らない。
void main(void)
{
 clsA oA;
 oA.vfFuncA();
}
投稿日時 - 2001-09-18 15:11:33
  • 回答No.2
レベル12

ベストアンサー率 40% (201/496)

私もあまり詳しくはないのですが、確か出来なかったと思います。ので、わたしは clsBを生成するときに clsAを渡し、clsBのコンストラクタの中でメンバー変数に保存するようにしています。 class clsB{ public:  clsB(clsA* pA){m_pA = pA};  ~clsB(){};  void vfFuncB(){   printf("clsB:: ...続きを読む
私もあまり詳しくはないのですが、確か出来なかったと思います。ので、わたしは clsBを生成するときに clsAを渡し、clsBのコンストラクタの中でメンバー変数に保存するようにしています。

class clsB{
public:
 clsB(clsA* pA){m_pA = pA};
 ~clsB(){};
 void vfFuncB(){
  printf("clsB::vfFuncB\n");
  printf("clsA::lVarAをアクセスしたい\n");
 };
private:
 m_pA;
};

クラス生成時
clsB oB(this);

ってな具合ですが、どうでしょう?
  • 回答No.3

vf が virtual function のような気がしたので、私は継承について少し。 class clsA { protected:  long lVarA; public:  virtual void vfFunc() {   「clsAの処理」;  } }; class clsB : public clsA { // clsBはclsAの機能を拡張する public: ...続きを読む
vf が virtual function のような気がしたので、私は継承について少し。

class clsA {
protected:
 long lVarA;
public:
 virtual void vfFunc() {
  「clsAの処理」;
 }
};

class clsB : public clsA { // clsBはclsAの機能を拡張する
public:
 void vfFunc() {
  clsA::vfFunc(); // まず、clsAとしての処理を行う
  「clsBの追加処理、lVarAもアクセスできる」;
 }
};

void main()
{
 clsA oA; clsB oB;
 oA.vFunc();
 oB.vFunc();
}
  • 回答No.4
レベル14

ベストアンサー率 50% (1122/2211)

他の方と似たような回答になりますが、clsA と clsB の関係が、vfFuncA() を 呼ぶ間だけの、「疎」な関係に有るのであれば、clsA.vfFuncA() で、clsB.vfFuncB() を 呼ぶときに、自分( clsA のオブジェクト)を渡すようにする方が良いでしょう。 class clsB {  …  void vfFuncB(clsA* a); /* メソッドの定義は後で ...続きを読む
他の方と似たような回答になりますが、clsA と clsB の関係が、vfFuncA() を
呼ぶ間だけの、「疎」な関係に有るのであれば、clsA.vfFuncA() で、clsB.vfFuncB() を
呼ぶときに、自分( clsA のオブジェクト)を渡すようにする方が良いでしょう。

class clsB {
 …
 void vfFuncB(clsA* a); /* メソッドの定義は後で */
{
  printf("clsA::lVarA is %ld\n", a.lfGet());
 }
};

class clsA {
 …
 void vfFuncA(void) {
  clsB oB;
  oB.vfFuncB(this);
 }
};

void clsB::vfFuncB(clsA* a)
{
 printf("clsA::lVarA is %ld\n", a.lfGet());
}

clsA と clsB の関係が「密」であるならば、yatokesa さんの回答にあるように
コンストラクタで関連を持たせるようにする方が良いです。
お礼コメント
nakashi

お礼率 14% (3/21)

class A {
public:
void f(){B b; b.f(this)};
void set(long x){v=x;}
private:
long v;
};

class B {
public:
void f(A* a) {
a->set(123);
}
};

void main() {
A a;
a.f();
}
で実装しました。
投稿日時 - 2001-09-18 17:01:36
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

-PR-

ピックアップ

-PR-
ページ先頭へ