<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Polymorphie funktioniert nicht]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe wieder ein Problem. Ich erstelle gerade ein Konsolenbasiertes Monopoly.<br />
Dazu habe ich eine &quot;abstrakte&quot; Klasse MFeld, eine Klasse &quot;KaufbaresFeld&quot; für kaufbare Felder die von MFeld erbt und jeweils eine Klasse für die verschiedenen Aktionsfelder die auch von MFeld erben.</p>
<p>In der Klasse MFeld habe ich eine virtuelle Methode void tueFeld(...), die ich in den erbenden Klassen überschreibe. Nun erstelle ich in meinem Programm einen Vektor von MFeld wo ich verscheidene kaufbare Felder und Aktionsfelder einfüge. Später hole ich mir ein Element aus dem Vektor raus und rufe tueFeld(...) auf. Das Problem ist, dass er dann immer in die Methode von MFeld reingeht, anstatt in die überschreibende Methode der erbenden Klasse.</p>
<p>Die Klasse MFeld:</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &quot;Spieler.h&quot;
#include &quot;Monopoly.h&quot;

class Monopoly;

class MFeld{
protected:
	int iPosition;
	bool bIsKaufbar;
	std::string sBeschreibung;
public:	
	MFeld(int iPosition, bool bIsKaufbar, std::string sBeschreibung);
	~MFeld(void);
	std::string getBeschreibung();
	virtual void tueFeld(Spieler oSpieler, Monopoly oMonopoly);
	int getPosition();
};
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;MFeld.h&quot;

MFeld::MFeld(int iPosition, bool bIsKaufbar, std::string sBeschreibung):
	iPosition(iPosition),
	sBeschreibung(sBeschreibung),
	bIsKaufbar(bIsKaufbar){
}

MFeld::~MFeld(void){
}

std::string MFeld::getBeschreibung(){
	return this-&gt;sBeschreibung;
}

int MFeld::getPosition(){
	return this-&gt;iPosition;
}

void MFeld::tueFeld(Spieler oSpieler, Monopoly oMonopoly){	
}
</code></pre>
<p>Meine Felder baue ich dann so zusammen und füge es in einen Vector:</p>
<pre><code>vFelder.push_back(StartFeld(1));
vFelder.push_back(KaufbaresFeld(2, &quot;FH Caféteria (Kaufpreis = 1 Mio €,  Mieteinnahmen = 100.000 €)&quot;, 100000, 1000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(LanFeld(3));
vFelder.push_back(KaufbaresFeld(4, &quot;FH Mensa (Kaufpreis = 2 Mio €, Mieteinnahmen = 200.000€)&quot;, 200000, 2000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(JackpotFeld(5));
vFelder.push_back(KaufbaresFeld(6, &quot;Ferggis (Kaufpreis = 4 Mio €, Mieteinnahmen = 400.000€)&quot;, 400000, 4000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(ZurLanFeld(7));
vFelder.push_back(KaufbaresFeld(8, &quot;Big Box Allgäu (Kaufpreis = 8 Mio €, Mieteinnahmen = 800.000€)&quot;, 800000, 8000000, Spieler(&quot;N/A&quot;)));
</code></pre>
<p>Im Verlauf des Spieles passiert dann das: Ich bestimme die Position des Spielers und führe dann das Feld aus. Leider geht er hier immer in die virtuelle Methode von MFeld rein. Auch wenn das Objekt eigentlich vom Typ KaufbaresFeld ist.</p>
<pre><code>vFelder.at(oSpieler.getPosition()-1).tueFeld(oSpieler, *this);
</code></pre>
<p>Hier noch der Code vom kaufbaren Feld:</p>
<pre><code>#pragma once
#include &quot;MFeld.h&quot;
#include &lt;string&gt;
#include &quot;Spieler.h&quot;
#include &quot;Monopoly.h&quot;

class KaufbaresFeld : public MFeld{
private:
	bool bRenoviert;
	int iMietPreis;
	int iKaufPreis;
	Spieler oBesitzer;	
public:
	KaufbaresFeld(int iPosition, std::string sBeschreibung, int iMietPreis, int iKaufPreis, Spieler oBesitzer);
	~KaufbaresFeld(void);
	void tueFeld(Spieler oSpieler, Monopoly oMonopoly);
	void setRenoviert(bool bRenoviert);
	void setBesitzer(Spieler oBesitzer);
};
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;KaufbaresFeld.h&quot;

KaufbaresFeld::KaufbaresFeld(int iPosition, std::string sBeschreibung, int iMietPreis, int iKaufPreis, Spieler oBesitzer):
																						MFeld(iPosition, true, sBeschreibung){
	this-&gt;iMietPreis = iMietPreis;
	this-&gt;iKaufPreis = iKaufPreis;
	this-&gt;oBesitzer = oBesitzer;
	this-&gt;bRenoviert = false;
}

KaufbaresFeld::~KaufbaresFeld(void)
{
}

void KaufbaresFeld::setBesitzer(Spieler oBesitzer){
	this-&gt;oBesitzer = oBesitzer;
}

void KaufbaresFeld::setRenoviert(bool bRenoviert){
	this-&gt;bRenoviert = bRenoviert;
}

void KaufbaresFeld::tueFeld(Spieler oSpieler, Monopoly oMonopoly){
	char cEingabe;
	int iGesamtMietPreis;

	printf(this-&gt;sBeschreibung.c_str());
	printf(&quot;\n&quot;);
	if (this-&gt;oBesitzer.getName() == &quot;N/A&quot;){
		printf(&quot;Möchten Sie kaufen? 'y' für Ja eingeben\n&quot;);
		cEingabe = getchar();
		if (cEingabe == 'y'){
			oSpieler.setGeld(oSpieler.getGeld() - 1000000);
			this-&gt;oBesitzer = oSpieler;
		}
	}else if(this-&gt;oBesitzer.getName() == oSpieler.getName()){
		printf(&quot;Das Feld gehört Ihnen bereits. Möchten Sie für %d renovieren? Für Ja 'y' eingeben\n&quot;, this-&gt;iKaufPreis);
		cEingabe = getchar();
		if (cEingabe == 'Y'){
			printf(&quot;Es wird renoviert und das Geld abgezogen\n&quot;);
		}
	}else{
		if (this-&gt;bRenoviert == true){
			iGesamtMietPreis = this-&gt;iMietPreis + this-&gt;iMietPreis * 0.1f;
		}else{
			iGesamtMietPreis = this-&gt;iMietPreis;
		}
		printf(&quot;Das Feld gehört bereits %s. Die Miete von %d wird transferiert&quot;, this-&gt;oBesitzer.getName().c_str(), this-&gt;iMietPreis);
		//Wenn Spieler B nur noch 50 hat aber die Miete 100 ist? Bzw. Mit Schuldengrenze
		oSpieler.setGeld(oSpieler.getGeld() - this-&gt;iMietPreis);
		this-&gt;oBesitzer.setGeld(this-&gt;oBesitzer.getGeld() + this-&gt;iMietPreis);
	}
}
</code></pre>
<p>Habe ich einen Fehler eingebaut, oder erkennt c++ generell nicht von welchem Typ das Objekt tatsächlich ist?</p>
<p>Gruß hyperion</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/296428/polymorphie-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 23:25:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296428.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Dec 2011 18:47:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 18:47:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe wieder ein Problem. Ich erstelle gerade ein Konsolenbasiertes Monopoly.<br />
Dazu habe ich eine &quot;abstrakte&quot; Klasse MFeld, eine Klasse &quot;KaufbaresFeld&quot; für kaufbare Felder die von MFeld erbt und jeweils eine Klasse für die verschiedenen Aktionsfelder die auch von MFeld erben.</p>
<p>In der Klasse MFeld habe ich eine virtuelle Methode void tueFeld(...), die ich in den erbenden Klassen überschreibe. Nun erstelle ich in meinem Programm einen Vektor von MFeld wo ich verscheidene kaufbare Felder und Aktionsfelder einfüge. Später hole ich mir ein Element aus dem Vektor raus und rufe tueFeld(...) auf. Das Problem ist, dass er dann immer in die Methode von MFeld reingeht, anstatt in die überschreibende Methode der erbenden Klasse.</p>
<p>Die Klasse MFeld:</p>
<pre><code>#pragma once
#include &lt;string&gt;
#include &quot;Spieler.h&quot;
#include &quot;Monopoly.h&quot;

class Monopoly;

class MFeld{
protected:
	int iPosition;
	bool bIsKaufbar;
	std::string sBeschreibung;
public:	
	MFeld(int iPosition, bool bIsKaufbar, std::string sBeschreibung);
	~MFeld(void);
	std::string getBeschreibung();
	virtual void tueFeld(Spieler oSpieler, Monopoly oMonopoly);
	int getPosition();
};
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;MFeld.h&quot;

MFeld::MFeld(int iPosition, bool bIsKaufbar, std::string sBeschreibung):
	iPosition(iPosition),
	sBeschreibung(sBeschreibung),
	bIsKaufbar(bIsKaufbar){
}

MFeld::~MFeld(void){
}

std::string MFeld::getBeschreibung(){
	return this-&gt;sBeschreibung;
}

int MFeld::getPosition(){
	return this-&gt;iPosition;
}

void MFeld::tueFeld(Spieler oSpieler, Monopoly oMonopoly){	
}
</code></pre>
<p>Meine Felder baue ich dann so zusammen und füge es in einen Vector:</p>
<pre><code>vFelder.push_back(StartFeld(1));
vFelder.push_back(KaufbaresFeld(2, &quot;FH Caféteria (Kaufpreis = 1 Mio €,  Mieteinnahmen = 100.000 €)&quot;, 100000, 1000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(LanFeld(3));
vFelder.push_back(KaufbaresFeld(4, &quot;FH Mensa (Kaufpreis = 2 Mio €, Mieteinnahmen = 200.000€)&quot;, 200000, 2000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(JackpotFeld(5));
vFelder.push_back(KaufbaresFeld(6, &quot;Ferggis (Kaufpreis = 4 Mio €, Mieteinnahmen = 400.000€)&quot;, 400000, 4000000, Spieler(&quot;N/A&quot;)));
vFelder.push_back(ZurLanFeld(7));
vFelder.push_back(KaufbaresFeld(8, &quot;Big Box Allgäu (Kaufpreis = 8 Mio €, Mieteinnahmen = 800.000€)&quot;, 800000, 8000000, Spieler(&quot;N/A&quot;)));
</code></pre>
<p>Im Verlauf des Spieles passiert dann das: Ich bestimme die Position des Spielers und führe dann das Feld aus. Leider geht er hier immer in die virtuelle Methode von MFeld rein. Auch wenn das Objekt eigentlich vom Typ KaufbaresFeld ist.</p>
<pre><code>vFelder.at(oSpieler.getPosition()-1).tueFeld(oSpieler, *this);
</code></pre>
<p>Hier noch der Code vom kaufbaren Feld:</p>
<pre><code>#pragma once
#include &quot;MFeld.h&quot;
#include &lt;string&gt;
#include &quot;Spieler.h&quot;
#include &quot;Monopoly.h&quot;

class KaufbaresFeld : public MFeld{
private:
	bool bRenoviert;
	int iMietPreis;
	int iKaufPreis;
	Spieler oBesitzer;	
public:
	KaufbaresFeld(int iPosition, std::string sBeschreibung, int iMietPreis, int iKaufPreis, Spieler oBesitzer);
	~KaufbaresFeld(void);
	void tueFeld(Spieler oSpieler, Monopoly oMonopoly);
	void setRenoviert(bool bRenoviert);
	void setBesitzer(Spieler oBesitzer);
};
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;KaufbaresFeld.h&quot;

KaufbaresFeld::KaufbaresFeld(int iPosition, std::string sBeschreibung, int iMietPreis, int iKaufPreis, Spieler oBesitzer):
																						MFeld(iPosition, true, sBeschreibung){
	this-&gt;iMietPreis = iMietPreis;
	this-&gt;iKaufPreis = iKaufPreis;
	this-&gt;oBesitzer = oBesitzer;
	this-&gt;bRenoviert = false;
}

KaufbaresFeld::~KaufbaresFeld(void)
{
}

void KaufbaresFeld::setBesitzer(Spieler oBesitzer){
	this-&gt;oBesitzer = oBesitzer;
}

void KaufbaresFeld::setRenoviert(bool bRenoviert){
	this-&gt;bRenoviert = bRenoviert;
}

void KaufbaresFeld::tueFeld(Spieler oSpieler, Monopoly oMonopoly){
	char cEingabe;
	int iGesamtMietPreis;

	printf(this-&gt;sBeschreibung.c_str());
	printf(&quot;\n&quot;);
	if (this-&gt;oBesitzer.getName() == &quot;N/A&quot;){
		printf(&quot;Möchten Sie kaufen? 'y' für Ja eingeben\n&quot;);
		cEingabe = getchar();
		if (cEingabe == 'y'){
			oSpieler.setGeld(oSpieler.getGeld() - 1000000);
			this-&gt;oBesitzer = oSpieler;
		}
	}else if(this-&gt;oBesitzer.getName() == oSpieler.getName()){
		printf(&quot;Das Feld gehört Ihnen bereits. Möchten Sie für %d renovieren? Für Ja 'y' eingeben\n&quot;, this-&gt;iKaufPreis);
		cEingabe = getchar();
		if (cEingabe == 'Y'){
			printf(&quot;Es wird renoviert und das Geld abgezogen\n&quot;);
		}
	}else{
		if (this-&gt;bRenoviert == true){
			iGesamtMietPreis = this-&gt;iMietPreis + this-&gt;iMietPreis * 0.1f;
		}else{
			iGesamtMietPreis = this-&gt;iMietPreis;
		}
		printf(&quot;Das Feld gehört bereits %s. Die Miete von %d wird transferiert&quot;, this-&gt;oBesitzer.getName().c_str(), this-&gt;iMietPreis);
		//Wenn Spieler B nur noch 50 hat aber die Miete 100 ist? Bzw. Mit Schuldengrenze
		oSpieler.setGeld(oSpieler.getGeld() - this-&gt;iMietPreis);
		this-&gt;oBesitzer.setGeld(this-&gt;oBesitzer.getGeld() + this-&gt;iMietPreis);
	}
}
</code></pre>
<p>Habe ich einen Fehler eingebaut, oder erkennt c++ generell nicht von welchem Typ das Objekt tatsächlich ist?</p>
<p>Gruß hyperion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152967</guid><dc:creator><![CDATA[hyperion1]]></dc:creator><pubDate>Sun, 04 Dec 2011 18:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 19:08:47 GMT]]></title><description><![CDATA[<p>vFelder ist so definiert, gell?</p>
<pre><code class="language-cpp">vecctor &lt;MFeld&gt; vFelder;
</code></pre>
<p>Wenn du ein push_back machst, wird das, das du übergibst, kopiert. So, und was passiert wohl wenn du ein KaufbaresFeld übergibst? Das sozusagen:</p>
<pre><code class="language-cpp">KaufbaresFeld kf;
Myfeld mf = kf;
</code></pre>
<p>Es wird nur der Myfeld-Teil von KaufbaresFeld kopiert. Nun dürfte auch klar sein, wieso immer Myfeld::tueFeld aufgerufen wird. Das Ganze hat also nichts mit Polymorphie zu tun...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152978</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Dec 2011 19:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 19:16:17 GMT]]></title><description><![CDATA[<p>Danke. Gibt es auch eine Möglichkeit in c++ das ohne Zeiger zu lösen?</p>
<p>Gruß hyperion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152986</guid><dc:creator><![CDATA[hyperion1]]></dc:creator><pubDate>Sun, 04 Dec 2011 19:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 19:25:05 GMT]]></title><description><![CDATA[<p>hyperion1 schrieb:</p>
<blockquote>
<p>Danke. Gibt es auch eine Möglichkeit in c++ das ohne Zeiger zu lösen?</p>
</blockquote>
<p>Nein :p Der Datentyp eines Objekts ist ja fix.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152991</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Dec 2011 19:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 19:27:12 GMT]]></title><description><![CDATA[<p>Um es anders auszudrücken: Polymorphie funktioniert bei Containern (z.B. std::vector&lt;&gt;) nur mit Zeigern (bzw. Shared-Pointern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152992</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 04 Dec 2011 19:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Sun, 04 Dec 2011 19:32:23 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Um es anders auszudrücken: Polymorphie funktioniert bei Containern (z.B. std::vector&lt;&gt;) nur mit Zeigern (bzw. Shared-Pointern).</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> bei Containern? Für ein polymorphes Verhalten brauchst du doch immer einen Zeiger/Referenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2152996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2152996</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Dec 2011 19:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Mon, 05 Dec 2011 07:07:09 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Th69 schrieb:</p>
<blockquote>
<p>Um es anders auszudrücken: Polymorphie funktioniert bei Containern (z.B. std::vector&lt;&gt;) nur mit Zeigern (bzw. Shared-Pointern).</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> bei Containern? Für ein polymorphes Verhalten brauchst du doch immer einen Zeiger/Referenz.</p>
</blockquote>
<p>Pack doch dann mal Referenzen in Container <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2153136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2153136</guid><dc:creator><![CDATA[Sägebart]]></dc:creator><pubDate>Mon, 05 Dec 2011 07:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Mon, 05 Dec 2011 07:23:18 GMT]]></title><description><![CDATA[<p>Sägebart schrieb:</p>
<blockquote>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Th69 schrieb:</p>
<blockquote>
<p>Um es anders auszudrücken: Polymorphie funktioniert bei Containern (z.B. std::vector&lt;&gt;) nur mit Zeigern (bzw. Shared-Pointern).</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> bei Containern? Für ein polymorphes Verhalten brauchst du doch immer einen Zeiger/Referenz.</p>
</blockquote>
<p>Pack doch dann mal Referenzen in Container <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Geht nücht, Referenzen sind keine Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2153138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2153138</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 05 Dec 2011 07:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie funktioniert nicht on Mon, 05 Dec 2011 09:52:58 GMT]]></title><description><![CDATA[<p>Frage am Rande...</p>
<p>hyperion1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class MFeld{
protected:
	int iPosition;
	bool bIsKaufbar;
	std::string sBeschreibung;
public:	
	MFeld(int iPosition, bool bIsKaufbar, std::string sBeschreibung);
	~MFeld(void);
	std::string getBeschreibung();
	virtual void tueFeld(Spieler oSpieler, Monopoly oMonopoly);
	int getPosition();
};
</code></pre>
</blockquote>
<p>Warum deklarierst Du überhaupt den Destruktor? Das kannst Du doch komplett dem Compiler überlassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2153182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2153182</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 05 Dec 2011 09:52:58 GMT</pubDate></item></channel></rss>