オブジェクト指向プログラミングについての質問です。 あるクラスのメンバー変数... – とれまが知恵袋

一問一答!ひとりの疑問はみんなの疑問!とれまが知恵袋

とれまが – 個人ブログがポータルサイトに!みんなでつくるポータルサイト。とれまが知恵袋
とれまが > 知恵袋  > コンピュータテクノロジー > プログラミング

オブジェクト指向プログラミングについての質問です。 あるクラスのメンバー変数...

オブジェクト指向プログラミングについての質問です。
あるクラスのメンバー変数を別のクラスから参照する方法を教えてください。 次のようなC++のプログラム、つまりクラスAとクラスBをクラスCに継承するようなプログラムがあるときの、クラスAのメンバー変数hogeの値をクラスBのメソッドPiyo内から知る上手な方法が思い浮かばず困っています。(コードが読みづらくて申し訳ありません)

クラスAやB,C には他のメンバーも定義されています。クラスCで定義されていた機能をクラスA,Bに分割しようとして、行き詰まってしまいました。アクセス制限については未だ使いこなせていないので、今回の例では適当に付けました。
つまり、クラスCの親クラスにクラスA,Bが存在するという条件の下で、クラスBの中でクラスAのメンバーを参照する方法が知りたいです。
ご教示よろしくお願いします。

class A{
protected:
int hoge;
public:
A(){hoge=0;}
}

class B{
protected:
int hiyoko;
void Piyo() {
// hiyokoにhogeの値を代入したい
}
B(){hiyoko=1;}
}

class C: public A, B{
public:
bool Equal(){
Piyo();
return hoge==hiyoko ? 1 : 0;
}
}

質問日時:2017年03月18日 22時17分
解決日時:2017年03月19日 18時34分

現在の状態はAとBが無関係なので、BからAのメンバを操作することは不可能です。
Bから一方的にAにアクセスするには、Aのインスタンスへの参照が必要です。

あとついでですが、class A{なにがし}; ←このように;が必要です。

#include <iostream>

class A{
public:
// とりあえずhogeをpublic。Bからだけ見れるようにfriendにすることも可能
int hoge;
A(){hoge=0;}
};

class B{
protected:
int hiyoko;
A* a;
void SetA(A& a_){
this->a = &a_;
}
void Piyo() {
// hiyokoにhogeの値を代入したい
hiyoko = a->hoge;
}
B(){hiyoko=1;a = NULL;}
};

class C: public A, B{
public:
C(){
// BにAを教えてあげる
SetA(*this);
}
bool Equal(){
Piyo();
return hoge==hiyoko;
}
};

int main(){
C instance;
std::cout << instance.Equal() << std::endl;
}

回答日時:2017年03月18日 22時39分

オススメワード

ビジネスワード

気になるワード

powerd by Yahoo!知恵袋

Copyright (C) 2006-2013 sitescope co.,ltd. All Rights Reserved.