ここでは、私が使用しているパターンに関して別のルートを検討する必要があると思いますが、まず専門家の意見を得ると思いました。ポインタベースクラスを使用した=演算子付きの多態性
私はクラスクラス(UsingClass)を持っています。このクラスは、ベースクラスポインタの動的リストを保持しています。新しいオブジェクトをリストに追加するとき、私は実際にそれを多相的に動作させることができないので、どのタイプのオブジェクトであるのか把握する必要があります。タグのついた行「これは私が好きなようにはうまくいかない!!」理想的には、関心のあるDerivedクラスから=演算子を多面的に使用しますが、残念ながらBaseクラスのデフォルト=演算子のみを使用しています.... Base純粋仮想を作成した場合、おそらく動作します自分自身のデータメンバー)、私は本当に両方の間で共通のメンバーを保持するDerivedクラスを持っていない(おそらく私は餌をカットし、それを行う必要があります)。
私はちょうど完全に間違ったパターンを使用しているかもしれませんが、私はどのような選択肢を考慮すべきか分かりません。
コードがコンパイルされているとは限りませんが、私と一緒に作業してください。前もって感謝します!
//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
};
あなたの質問は不明です。おそらく、あなたの解決策を修正しようとするのではなく、実際にあなたが達成しようとしていることを私たちに伝えることから始めるべきです... –
私はあなたに 'clone()'メソッド... google cloneとたくさんの例があるように見えます。 –
http://icu-project.org/docs/papers/cpp_report/the_assignment_operator_revisited.htmlこれにより、多くのことが解決される可能性があります。 – DumbCoder