1.6k Aufrufe
Gefragt in Anwendungen(Java,C++...) von

foreach (Animal d in AnimalBufferList)
{
this.Add( ....call matching copyconstructor.... (d) );
}
.
.
.

Wie kann ich hier den richtigen Constructor aufrufen.
Da ich nicht weiß ob d ein Schwein (Pig) oder Kuh(cow) ist kann ich ja nicht mit new arbeiten. Wie muss ich hier vorgehen?

Also meine tierischen Klassen sind folgendermaßen aufgebaut.

abstract class Animal
{
public Animal (Animal d)
{
}
.

}
}


class Pig: Animal
{
public Pig(Pig d): base(d)
{
}
}

class Cow: Animal
{
public Cow(Cow d): base(d)
{
}
}

3 Antworten

0 Punkte
Beantwortet von
Benutz ne virtuelle Methode, die den Copy-Vorgang übernimmt und von allen Subklassen überschrieben wird.
0 Punkte
Beantwortet von
und wie sollte das genau aussehen?
So?

abstract class Animal
{
public Animal (Animal d)
{
}
.
public abstract Animal CopyObject();
}

class Pig: Animal
{
public Pig(Pig d): base(d)
{
}
public override Pig CopyObject()
{
return new Pig(this);
}
}

class Cow: Animal
{
public Cow(Cow d): base(d)
{
}
public override Cow CopyObject()
{
return new Cow(this);
}
}


Kanns heute nicht mehr testen da ich nicht mehr in der Arbeit bin
Lg Annex31B
0 Punkte
Beantwortet von
Ich kenne mich mit der C#-Syntax nicht genau aus und habe auch keinen Compiler hier.

Vom Prinzip her sieht das so aus, wie ich es mir auch vorgestellt hätte.
Ich weiß aber nicht, ob C# kovariante Rückgabetypen unterstützt, es könnte also sein, dass auch in den Unterklassen der Rückgabetyp Animal lauten müsste. Aber das wäre ja kein Problem.
...