派生クラスのポインタへの参照(または可能でない場合はポインタ)を基本クラスAに入れたいと考えています。 これは次のようになります。データのクラスがあることで派生クラスのポインタへの基本クラスの参照
BaseClassController
{
public :
//Constructors, destructor,...
protected :
BaseDataClass *& m_current;
}
DerivedClassAController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassA * m_currentA;
}
DerivedClassBController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassB * m_currentB;
}
:
BaseDataClass
{
void doSomething();
}
DerivedDataClassA : public BaseDataClass
{
//...
}
DerivedDataClassB : public BaseDataClass
{
//...
}
私はBaseClassControllerで次に何をしたいのは何がある:
BaseClassController::someFunction(){
m_current->doSomething();
}
問題があることですm_currentAとm_currentBが指し示すオブジェクトは、プログラムの存続期間を通して大きく変化するでしょう。そして、m_current参照が自動的に変更されるようにしたいと思いますedクラスのポインタが変更されます。これを好き
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
}
をしていない: Concretlyが、私はこのように見えるようにm_currentAが指すオブジェクトを変更する機能を希望
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
m_current = ptA;
}
私は、派生クラスのコンストラクタにポインタを渡してみました:
BaseClassController::BaseClassController(BaseDataClass* pt)
: m_current(pt)
{
}
DerivedClassAController::DerivedClassAController()
: BaseClassController(m_currentA),
m_current(A)
{
}
しかし、私は、DerivedClassAControllerのDerivedDataClassBを指すm_currentを持っていました。
これは有効ですか?それとももっと良い方法がありますか?
注: DerivedClassAController時間のDerivedDataClassA 95%m_currentAを使用します。基本クラスでm_currentポインタだけを使うと、どこにでもdynamic_cast(m_current)が置かれます。
「多型」 - 試してみましたか?あなたは 'm_current'ポインタを使って必要なものすべてを行うことができますか? – LogicStuff
'仮想BaseDataClass * GetCurrent()= 0;'を 'BaseClassController'に追加し、2つの派生コントローラがそれを実装して、それぞれ' m_currentA'または 'm_currentB'の現在の値を返します。 –
LogicStuff - 理由を説明するためにメモを追加しました。イゴール - そうすることができます!試してみます。しかし、私が試したように動作するかどうかを知りたい場合は、 – ElevenJune