これが契約です。使用しているパターンに関して別のルートに進む必要があると思いますが、最初に専門家の意見を得ると思いました.
基本クラス ポインターの動的リストを保持するクラス (UsingClass) があります。リストに新しいオブジェクトを追加するときは、それがどのタイプのオブジェクトであるかを把握する必要があります。これは、ポリモーフィックな方法で実際に機能させることができないためです。以下の行には、「これは私が望むようには機能しません!!」というタグが付けられています。興味のある Derived クラスから =operator をポリモーフィックに使用するのが理想的ですが、残念ながら Base クラスのデフォルトの =operator しか使用しません。独自のデータメンバー)、しかし、派生クラスに両方に共通のメンバーを保持させたくありません (おそらく、餌を切ってそれを行う必要があるかもしれません)。
完全に間違ったパターンを使用している可能性があると思いますが、どの代替案を検討すべきかわかりません。
コードが必ずしもコンパイルされるとは限りませんが、私と一緒に作業してください。前もって感謝します!
//code block
class Base {
protected:
int x;
float y;
string type; // default to Derived1 or Dervied2 depending on the object inst
public:
virtual int functionM(int l) = 0;
int functionN(int P);
};
class Derived1 : public Base {
protected:
int a;
public:
int functionM(int l);
float functionR(int h);
};
class Derived2 : public Base {
protected:
int b;
float r;
public:
int functionM(int l);
float functionR(int h);
};
#define MAX_ARRAYSIZE 10
class UsingClass {
private:
Base* myDerived1And2DynamicList[MAX_ARRAYSIZE];
int indexForDynamicList;
public:
void functionAddDerivedToList(*Base myInputPtr) {
if((indexForDyanmicList + 1) < MAX_ARRAYSIZE) {
if(myInputPtr->type == "Derived1") {
myDerived1And2DynamicList[indexForDyanmicList+1] = new Derived1;
*myDerived1And2DynamicList[indexForDyanmicList+1] = *myInputPtr; // THIS WILL NOT WORK LIKE I WANT IT TO!!
} else if (myInputPtr->type == "Derived2") {
myDerived1And2DynamicList[indexForDyanmicList+1] = new Derived2;
*myDerived1And2DynamicList[indexForDyanmicList+1] = *myInputPtr; // THIS WILL NOT WORK LIKE I WANT IT TO!!
}
}
} // end of void function
};