Vererbung in C++ Tier {abstract}<-Vogel<-Ente

Dani87

Grünschnabel
Hi Leute,

ich bin gerade dabei ein Codefragment aus der Sprache Java nach C++ zu schreiben. Der Java Teil um den es sich dabei handelt sieht wie folgt aus:

Code:
public class index
{
	public static void main(String[] args)
	{
		Tier einTier = new Ente("quakt");
		einTier.gibLaut();
		
		Vogel einVogel = (Vogel)einTier;
		einVogel.gibLaut();
		
		Ente eineEnte = (Ente)einTier;
		eineEnte.gibLaut();
		eineEnte.gibLaut2();
	}
}

public abstract class Tier {

	protected String laut;
	
	public abstract void gibLaut();
}

public class Vogel extends Tier {

	protected String laut = "zwitschert";
	
	public Vogel() { }
	
	public Vogel(String laut) {
		this.laut = laut;
	}
	
	public void gibLaut() {
		System.out.println("Vogel: " + laut);
	}
}

public class Ente extends Vogel {

	protected String laut = "zwitschert nicht";
	
	public Ente(String laut) {
		this.laut = laut;
	}
	
	public void gibLaut() {
		System.out.println("Ente: " + laut);
	}
	
	public void gibLaut2() {
		super.gibLaut();
	}
}

Bei diesem Beispiel gibt es eine abstrakte Klasse Tier, sowie die Klassen Vogel und Ente. Dabei ist Vogel eine Unterklasse von Tier, und Ente eine Unterklasse von Vogel.

Die Ausgabe sieht wie folgt aus:

Ente: quakt
Ente: quakt
Ente: quakt
Vogel: zwitschert

Das Problem welches ich nun habe ist folgendes:

Nachdem ich versucht habe den Teil in C++ umzuwandeln kommt dieser Fehler:

Fehler 1 error C2440: 'Typumwandlung': 'Tier' kann nicht in 'Vogel' konvertiert werden ... 73 Tier_Vogel_Ente

Code:
class Tier
{
	protected:
		string laut;

	public:
		virtual void gibLaut(void) = 0;
};

class Vogel : public Tier
{
	protected:
		string laut;

	public:
		Vogel()
		{}

		Vogel(string laut)
		{
			this->laut = laut;
		}

		virtual void gibLaut(void)
		{
			cout << "Vogel: " << laut.c_str() << "\n";
		}
};

class Ente : public Vogel
{
	protected:
		string laut;

	public:
		Ente()
		{}

		Ente(string laut)
		{
			this->laut = laut;
		}

		void gibLaut(void)
		{
			cout << "Ente: " << laut.c_str() << "\n";
		}

		void gibLaut2(void)
		{
			Vogel::gibLaut();
		}
};

void main()
{
	int buffer;

	Tier *einTier;

	einTier = new Ente("quakt");
	einTier->gibLaut();

	Vogel *einVogel;
	einVogel = (Vogel)*einTier;
	einVogel->gibLaut();

	cin >> buffer;
}

Was mache ich da nur Falsch?

Viele Grüße,
Dani
 
Ist der Fehler hier?
einVogel = (Vogel)*einTier;

Probiers mal so:
einVogel=*((Vogel *)einTier);
 
Hi sheel,

Genau in dieser Zeile liegt der Fehler!

Weder "einVogel = (Vogel)*einTier;" noch "einVogel=*((Vogel *)einTier);" führt zum Erfolg...

einVogel = (Vogel)*einTier;
'Tier' kann nicht in 'Vogel' konvertiert werden

einVogel=*((Vogel *)einTier);
'Vogel' kann nicht in 'Vogel *' konvertiert werden

Viele Grüße,
Dani
 
Zurück