同じBase-Class/Interface(Baseクラス1)から継承したいくつかの類似したクラスがありますが、同様の機能をいくつか共有しています。それらはすべて、異なるクラスの独自のメンバー変数も持ち、それらのそれぞれは同じBase-Class/Interface(Baseクラス2)を継承します。基本クラス1の変数を基本クラス2の型で定義することは可能ですか?次に、基本クラス1を使用するクラスの実際の実装では、基本クラス2型の変数を適切な型にします。説明するのは難しいので、以下のように簡略化した例です。子変数を参照する親クラス
//Base-Class 1
class Shape
{
public Shape() {}
ShapeExtra m_var;
//The common functions
public GetVar(){ return m_var; }
}
class Circle : Shape
{
public Circle() { m_var = new CircleExtra(); }
public void CircleFunc()
{
m_var.CircleExtraFunc();
}
}
class Triangle : Shape
{
public Triangle() { m_var = new TriangleExtra(); }
public void TriangleFunc()
{
m_var.TriangleExtraFunc();
}
}
.
.
.
//Base_Class 2
class ShapeExtra
{
public ShapeExtra() {}
}
class CircleExtra : ExtraClass
{
public CircleExtra() {}
void CircleExtraFunc() {//Do stuff}
}
class TriangleExtra : ExtraClass
{
public TriangleExtra() {}
void TriangleExtra() {//Do stuff}
}
.
.
.
だから、私は子クラスでm_var
は、独自のユニークなバージョンとして、それを保管する必要があります。 、(W/O余分CircleExtra m_var;
)今のでGetVar()
作品が、CircleFunc
で、m_var
はまだShapeExtra
のタイプであり、したがってがCircleExtraFunc
がが存在することを知りません。私はそれをしたいときはいつでもm_var
を投げつけることができましたが、それは私の現実の事例では反復的で価値がありません。 GetVar()
の機能をShape
に保ちながら、ShapeExtra
に基づいてユニークなクラスの関数を利用する方法はありますか?
私の中に何か残っているものがあれば質問してください。
質問は何ですか? –
「毎回キャストしないでこれを行う方法はありますか?」 –
"子クラスでm_varを独自のバージョンとして保持する必要があります。"それはすでにです。子クラスの 'm_var'は基本クラスの' m_var'と全く関係ありません。基本クラスには独自の 'm_var'があり、各子クラスも同じです。彼らはユニークで独特です。仮想関数とは異なり、クラスメンバは基本クラスの同じ名前のメンバを "オーバーライド"しません。あなたの質問は不明です。 –