<?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[Klassen &amp;amp; Vererbung Problem]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich soll ein einfaches Programm schreiben, welches eine Klasse &quot;Katalog&quot; definiert. diese enthält die Attribute Verfasser und Titel.<br />
Desweiteren soll es die Unterklassen &quot;KatalogBuch&quot; und &quot;KatalogPGB&quot; geben, welche die Attribute der Oberklasse &quot;Katalog&quot; erben.</p>
<p>in der Oberklasse soll es eine Methode &quot;Info&quot; geben, welche dann einfach den Titel und den Verfasser ausgibt.</p>
<p>Nun soll ich aber in der Unterklasse &quot;KatalogBuch&quot; die Methode &quot;Info&quot; so verfeinern, dass auch das zusaätzliche Attribut der Unterklasse (&quot;ISBN&quot;) ausgegeben wird. Die Attribute &quot;Verfasser&quot; und &quot;Buch&quot; sollen aber weiterhin durch die virtuelle Methode der Klasse &quot;Katalog&quot; gegeben werden.</p>
<p>So weit bin ich nun:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class Katalog //erstellt Klasse Katalog<br />
{<br />
protected:<br />
string Verfasser;<br />
string Titel;<br />
public:</p>
<p>Katalog(string _Verfasser, string _Titel) //Konstruktor<br />
{<br />
Verfasser = _Verfasser;<br />
Titel = _Titel;<br />
}</p>
<p>void Info() //Methode Info<br />
{<br />
cout &lt;&lt; Verfasser &lt;&lt; endl;<br />
cout &lt;&lt; Titel &lt;&lt; endl;<br />
}</p>
<p>};</p>
<p>class KatalogPGB : public Katalog //KatalogPGB erbt von Katalog<br />
{<br />
private:<br />
string Koerperschaft;<br />
public:<br />
KatalogPGB (string _Koerperschaft) : Katalog(Verfasser, Titel)<br />
{<br />
Koerperschaft = _Koerperschaft;<br />
}</p>
<p>};</p>
<p>class KatalogBuch : public Katalog //KatalogBuch erbt von Katalog<br />
{</p>
<p>private:<br />
string ISBN;<br />
public:<br />
KatalogBuch(string _ISBN) : Katalog(Verfasser,Titel)<br />
{<br />
ISBN = _ISBN;<br />
}</p>
<p>void Info()<br />
{<br />
cout &lt;&lt; Verfasser &lt;&lt; endl;<br />
cout &lt;&lt; Titel &lt;&lt; endl;<br />
}<br />
};</p>
<p>int main () {<br />
KatalogBuch K1(&quot;Hans&quot;,&quot;Hubert&quot;,&quot;12345&quot;);<br />
<a href="http://K1.Info" rel="nofollow">K1.Info</a>();</p>
<p>return 0;<br />
}</p>
<p>Was mache ich flasch? wie krieg ich es hin dass diese Info Methode in der Unterklasse KatalogBuch läuft?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301437/klassen-amp-vererbung-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 00:49:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301437.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Mar 2012 11:46:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 11:49:07 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich soll ein einfaches Programm schreiben, welches eine Klasse &quot;Katalog&quot; definiert. diese enthält die Attribute Verfasser und Titel.<br />
Desweiteren soll es die Unterklassen &quot;KatalogBuch&quot; und &quot;KatalogPGB&quot; geben, welche die Attribute der Oberklasse &quot;Katalog&quot; erben.</p>
<p>in der Oberklasse soll es eine Methode &quot;Info&quot; geben, welche dann einfach den Titel und den Verfasser ausgibt.</p>
<p>Nun soll ich aber in der Unterklasse &quot;KatalogBuch&quot; die Methode &quot;Info&quot; so verfeinern, dass auch das zusaätzliche Attribut der Unterklasse (&quot;ISBN&quot;) ausgegeben wird. Die Attribute &quot;Verfasser&quot; und &quot;Buch&quot; sollen aber weiterhin durch die virtuelle Methode der Klasse &quot;Katalog&quot; gegeben werden.</p>
<p>So weit bin ich nun:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class Katalog //erstellt Klasse Katalog<br />
{<br />
protected:<br />
string Verfasser;<br />
string Titel;<br />
public:</p>
<p>Katalog(string _Verfasser, string _Titel) //Konstruktor<br />
{<br />
Verfasser = _Verfasser;<br />
Titel = _Titel;<br />
}</p>
<p>void Info() //Methode Info<br />
{<br />
cout &lt;&lt; Verfasser &lt;&lt; endl;<br />
cout &lt;&lt; Titel &lt;&lt; endl;<br />
}</p>
<p>};</p>
<p>class KatalogPGB : public Katalog //KatalogPGB erbt von Katalog<br />
{<br />
private:<br />
string Koerperschaft;<br />
public:<br />
KatalogPGB (string _Koerperschaft) : Katalog(Verfasser, Titel)<br />
{<br />
Koerperschaft = _Koerperschaft;<br />
}</p>
<p>};</p>
<p>class KatalogBuch : public Katalog //KatalogBuch erbt von Katalog<br />
{</p>
<p>private:<br />
string ISBN;<br />
public:<br />
KatalogBuch(string _ISBN) : Katalog(Verfasser,Titel)<br />
{<br />
ISBN = _ISBN;<br />
}</p>
<p>void Info()<br />
{<br />
cout &lt;&lt; Verfasser &lt;&lt; endl;<br />
cout &lt;&lt; Titel &lt;&lt; endl;<br />
}<br />
};</p>
<p>int main () {<br />
KatalogBuch K1(&quot;Hans&quot;,&quot;Hubert&quot;,&quot;12345&quot;);<br />
<a href="http://K1.Info" rel="nofollow">K1.Info</a>();</p>
<p>return 0;<br />
}</p>
<p>Was mache ich flasch? wie krieg ich es hin dass diese Info Methode in der Unterklasse KatalogBuch läuft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195814</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 11:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 11:55:50 GMT]]></title><description><![CDATA[<p>Argh, wieder ein _UglyNames gestörter. Leute, wenn ihr in die Sourcen von Microsoft guckt solltet ihr wissen was ihr tut. Die schreiben <strong>_So _Scheiße _Hässlich</strong> weil das für die Implementierung reservierte Namen sind. Macht doch sowas nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Zu deinem Problem: virtuelle Methoden sollten auch virtual sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> *Edit:<br />
Und wir haben hier [cpp-Tags], dann wird der Code schön bunt.</p>
<p>* Hä? In KatalogPGB überschreibst du die Info Methode nicht mal und in KatalogBuch gibst du genau das Gleiche aus. WTF erwartest du, was da passieren soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195817</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 11:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:04:36 GMT]]></title><description><![CDATA[<p>ok, also schreibe ich in der Oberklasse &quot;virtual void info()&quot; ?<br />
Aber das löst ja das problem nocht nicht. Ich habe nun versucht es u ändern:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

#include &lt;iostream&gt;
using namespace std;

class Katalog
	{
	protected:
		string Verfasser;
		string Titel;
	public:

		Katalog(string _Verfasser, string _Titel)
		{
			Verfasser = _Verfasser;
			Titel = _Titel;
		}

		virtual void Info()
		{
			cout &lt;&lt; Verfasser &lt;&lt; endl;
			cout &lt;&lt; Titel &lt;&lt; endl;
		}

	};

class KatalogPGB : public Katalog
	{
	private:
		string Koerperschaft;
	public:
		KatalogPGB (string _Koerperschaft) : Katalog(Verfasser, Titel)
		{
			Koerperschaft = _Koerperschaft;
		}

	};

class KatalogBuch : public Katalog
	{

	private:
		string ISBN;
	public:
		KatalogBuch(string _ISBN) : Katalog(Verfasser,Titel)
		{
			ISBN = _ISBN;
		}

		void Info() 
		{
			cout&lt;&lt;ISBN&lt;&lt;endl;
		}
	};

int main () {
	KatalogBuch K1(&quot;Hans&quot;,&quot;Hubert&quot;,&quot;12345&quot;);
	K1.Info();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195819</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:09:42 GMT]]></title><description><![CDATA[<p>Du musst ja auch alles Ausgeben in den Methoden:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A
{
  int i;
  A() : i(42) {}
  virtual void foo() const
  {
    std::cout &lt;&lt; i &lt;&lt; '\n';
  }
};

struct B : public A
{
  int j;
  B() : j(77) {}
  virtual void foo() const
  {
    std::cout &lt;&lt; i &lt;&lt; '\n';
    std::cout &lt;&lt; j &lt;&lt; '\n';
  }
};

int main()
{
  B b;
  b.foo(); // gibt immer das Richtige aus
  A* a = &amp;b;
  a-&gt;foo(); // Huch! Dank virtual wird auch hier foo() von B aufgerufen.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195821</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:23:30 GMT]]></title><description><![CDATA[<p>Erstmal danke dass du dich für mich bemühst, bin da noch relativ am Anfang <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Also wir haben jetzt erstmal die virtual void Info überall geändert und ein &quot;const&quot; dahinter geschrieben. Außerdem die Ausgabe in der Klasse KatalogBuch&quot; auch um die Attribute der Oberklasse erweitert. Soweit so gut. Jetzt kommt in der main noch ein fehler (hab ich im Code an der Stelle dazugeschrieben</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Katalog
	{
	protected:
		string Verfasser;
		string Titel;
	public:

		Katalog(string _Verfasser, string _Titel)
		{
			Verfasser = _Verfasser;
			Titel = _Titel;
		}

		virtual void Info() const 
		{
			cout &lt;&lt; Verfasser &lt;&lt; endl;
			cout &lt;&lt; Titel &lt;&lt; endl;
		}

	};

class KatalogPGB : public Katalog
	{
	private:
		string Koerperschaft;
	public:
		KatalogPGB (string _Koerperschaft) : Katalog(Verfasser, Titel)
		{
			Koerperschaft = _Koerperschaft;
		}

	};

class KatalogBuch : public Katalog
	{

	private:
		string ISBN;
	public:
		KatalogBuch(string _ISBN) : Katalog(Verfasser,Titel)
		{
			ISBN = _ISBN;
		}

		virtual void Info()const {
			cout&lt;&lt;Verfasser&lt;&lt;endl;
			cout&lt;&lt;Titel&lt;&lt;endl;
	    	cout&lt;&lt;ISBN&lt;&lt;endl;
		}

	};

int main () {
	KatalogBuch K1(&quot;Hans&quot;,&quot;Hubert&quot;,&quot;12345&quot;);   //ERROR: no matching function for call to 'KatalogBuch::KatalogBuch (const char[5],const char [7], const char [6]'
	Katalog* a= &amp;K1;
	a-&gt;Info();

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195824</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:26:24 GMT]]></title><description><![CDATA[<p>Erbende Klassen bekommen nicht magisch Konstruktoren von ihren Eltern. Der Konstruktor von KatalogBuch will nur einen String, bekommt aber drei. (PS: Bitte bitte bitte lies was ich zu den _UglyNames geschrieben habe. ;))<br />
PPS: Die Initialisierungsliste kann man auch für Variablen nutzen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct A
{
  int i;
  A(int i) : i(i) {}
  virtual void foo() const
  {
    std::cout &lt;&lt; i &lt;&lt; '\n';
  }
};

struct B : public A
{
  int j;
  B(int i, int j) : A(i), j(j) {}
  virtual void foo() const
  {
    std::cout &lt;&lt; i &lt;&lt; '\n';
    std::cout &lt;&lt; j &lt;&lt; '\n';
  }
};

int main()
{
  B b(42, 77);
  b.foo(); // gibt immer das Richtige aus
  A* a = &amp;b;
  a-&gt;foo(); // Huch! Dank virtual wird auch hier foo() von B aufgerufen.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195825</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:28:28 GMT]]></title><description><![CDATA[<p>Die Info-Funktio soll nach der Aufgabenstellung wohl eher so aussehen:</p>
<pre><code class="language-cpp">void Info()
        {
            Katalog::Info();
            cout&lt;&lt;ISBN&lt;&lt;endl;
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195827</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:32:56 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Die Info-Funktio soll nach der Aufgabenstellung wohl eher so aussehen:</p>
</blockquote>
<p>Stimmt, nur mir vitual und const.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195829</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:32:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:38:38 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Die Info-Funktio soll nach der Aufgabenstellung wohl eher so aussehen:</p>
</blockquote>
<p>Stimmt, nur mir vitual und const.</p>
</blockquote>
<p>const: wenn die Basis const ist ja, sonst nein<br />
virtual: muss nur in der Basis vorhanden sein, in der abgeleiteten Klasse dient es der Übsersichtlichkeit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195832</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:45:05 GMT]]></title><description><![CDATA[<p>Wie meinst du das mit dem Konstruktor? Der Fehler ist nun weg, es erfolgt aber trotzdem keine Ausgabe</p>
<p>soweit bin ich nun und ich hoffe die &quot;uglynames&quot; sind nun auch weniger ugly^^</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Katalog
	{
	protected:
		string Verfasser;
		string Titel;
	public:

		Katalog(string pVerfasser, string pTitel)
		{
			Verfasser = pVerfasser;
			Titel = pTitel;
		}

		virtual void Info() const 
		{
			cout &lt;&lt; Verfasser &lt;&lt; endl;
			cout &lt;&lt; Titel &lt;&lt; endl;
		}

	};

class KatalogPGB : public Katalog
	{
	private:
		string Koerperschaft;
	public:
		KatalogPGB (string pKoerperschaft) : Katalog(Verfasser, Titel)
		{

			Koerperschaft = pKoerperschaft;
		}

	};

class KatalogBuch : public Katalog
	{

	private:
		string ISBN;
	public:
		KatalogBuch(string pISBN) : Katalog(Verfasser,Titel)
		{

			ISBN = pISBN;
		}

	virtual void Info() {

			Katalog::Info();
	    	cout&lt;&lt;ISBN&lt;&lt;endl;
		}

	};

int main () {
	Katalog A1(&quot;Hans&quot;, &quot;Hubert&quot;);
	KatalogBuch K1(&quot;12345&quot;);

	K1.Info();

	/*Katalog* a= &amp;K1; 
    a-&gt;Info(); */

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195833</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 12:50:38 GMT]]></title><description><![CDATA[<p>Bitte, hier sind deine Hausaufgaben:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

class Katalog
{
	string Verfasser;
	string Titel;
	public:
	Katalog(string Verfasser, string Titel)
		: Verfasser(Verfasser)
		, Titel(Titel)
	{}

	virtual void Info() const
	{
		cout &lt;&lt; &quot;Verfasser: &quot; &lt;&lt; Verfasser &lt;&lt; '\n';
		cout &lt;&lt; &quot;Titel: &quot; &lt;&lt; Titel &lt;&lt; '\n';
	}
};

class KatalogPGB : public Katalog
{
	string Koerperschaft;
public:
	KatalogPGB(string Verfasser, string Titel, string Koerperschaft)
		: Katalog(Verfasser, Titel)
		, Koerperschaft(Koerperschaft)
	{}

	virtual void Info() const
	{
		Katalog::Info();
		cout &lt;&lt; &quot;Koerperschaft: &quot; &lt;&lt; Koerperschaft &lt;&lt; '\n';
	}
};

class KatalogBuch : public Katalog
{
	string ISBN;
public:
	KatalogBuch(string Verfasser, string Titel, string ISBN)
		: Katalog(Verfasser, Titel)
		, ISBN(ISBN)
	{}

	virtual void Info() const
	{
		Katalog::Info();
		cout &lt;&lt; &quot;ISBN: &quot; &lt;&lt; ISBN &lt;&lt; '\n';
	}
};

int main()
{
	KatalogBuch K1(&quot;Hans&quot;, &quot;Hubert&quot;, &quot;12345&quot;);  
	Katalog* a= &amp;K1;
	a-&gt;Info();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195836</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 12:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 13:07:37 GMT]]></title><description><![CDATA[<p>Hehe sind zwar keine Hausuafgaben, aber deine Version klappt. Danke schonmal.</p>
<p>Aaaaallerdings:</p>
<p>gebe ich in der main nun folgendes ein:</p>
<pre><code class="language-cpp">int main () {

	KatalogBuch K1(&quot;hubert&quot;,&quot;hans&quot;,&quot;12345&quot;);
	KatalogBuch k2(&quot;Emma&quot;,&quot;Peter&quot;,&quot;43214&quot;);
	Katalog* a= &amp;K1; 
    a-&gt;Info();
	Katalog* b=&amp;k2;
	b-&gt;Info();

	return 0;
</code></pre>
<p>Kriegen wir zwar Vor und Nachnamen, allerdings nicht die ISBN Nummern</p>
<p>Edit: hat sich erledigt. Klappt.</p>
<p>Eine Frage bleibt: wieso muss ich bei jedem Konstruktor der Unterklassen die alten parameter erneut hineinschreiben. Was hat das dann noch mit Vererbng zu tun? Weil wir doch über &quot;:Katalog(Verfasser, Titel)&quot; diese Parameter weitergeben?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195845</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 13:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 13:13:56 GMT]]></title><description><![CDATA[<p>Ich hab auch mal eine Version gemacht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Katalog
{
private:
    std::string verfasser, titel;
public:
    Katalog(const std::string&amp; v, const std::string&amp; t)
    : verfasser(v), titel(t) {}
    std::string VerfasserName() const { return verfasser; }
    std::string TitelName() const { return titel; }
    virtual std::string InfoString() const = 0; //Rein virtuell!
};

std::string Katalog::InfoString() const //Rein virtuelle Methoden muessen
{                                       //ausserhalb der Klasse definiert werden.
    return verfasser + &quot;: \&quot;&quot; + titel + &quot;\&quot;&quot;;
}

class KatalogBuch : public Katalog
{
private:
    std::string isbn;
public:
    KatalogBuch(const std::string&amp; v, const std::string&amp; t,
                const std::string&amp; i)
    : Katalog(v, t), isbn(i) {}
    std::string Isbn() const { return isbn; }
    virtual std::string InfoString() const
    {
        return Katalog::InfoString() + &quot; ISBN: &quot; + isbn;
    }
};

class KatalogPGB : public Katalog
{
private:
    std::string koerperschaft;
public:
    KatalogPGB(const std::string&amp; v, const std::string&amp; t,
               const std::string&amp; k)
    : Katalog(v, t), koerperschaft(k) {}
    std::string Koerperschaft() const { return koerperschaft; }
    virtual std::string InfoString() const
    {
        return Katalog::InfoString() + &quot; Koerperschaft: &quot; + koerperschaft;
    }
};

int main()
{
    KatalogBuch k(&quot;Ich&quot;, &quot;Irgendwas&quot;, &quot;1234&quot;);
    std::cout &lt;&lt; k.InfoString();
    return 0;
}
</code></pre>
<p>Geht doch alles.</p>
<p>Edit: Sowas blödes, da war noch jemand scharf drauf ne Lösung zu machen. Kommt davon, wenn man sich so viel Zeit lässt und denkt, dass hier keiner Hausaufgaben für andere macht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Egal, haste gleich 2 Lösungen. Viel Spaß damit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195848</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Tue, 27 Mar 2012 13:13:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 13:10:00 GMT]]></title><description><![CDATA[<p>RuggedC schrieb:</p>
<blockquote>
<p>Eine Frage bleibt: wieso muss ich bei jedem Konstruktor der Unterklassen die alten parameter erneut hineinschreiben. Was hat das dann noch mit Vererbng zu tun? Weil wir doch über &quot;:Katalog(Verfasser, Titel)&quot; diese Parameter weitergeben?!</p>
</blockquote>
<p>Ist halt so. Die Basis wird normalerweise automatisch initialisiert, dafür muss aber ein Defaultkonstruktor verfügbar sein. Ist hier aber nicht der Fall, weshalb du die Basis selber intialisieren musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195850</guid><dc:creator><![CDATA[arghonaut]]></dc:creator><pubDate>Tue, 27 Mar 2012 13:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 13:13:32 GMT]]></title><description><![CDATA[<p>RuggedC schrieb:</p>
<blockquote>
<p>Eine Frage bleibt: wieso muss ich bei jedem Konstruktor der Unterklassen die alten parameter erneut hineinschreiben. Was hat das dann noch mit Vererbng zu tun? Weil wir doch über &quot;:Katalog(Verfasser, Titel)&quot; diese Parameter weitergeben?!</p>
</blockquote>
<p>Die Antwort innerhalb der Sprache ist: Weil es nicht anders geht. Jede Funktion ist eigenständig und bekommt genau die Parameter, die sie erwartet.<br />
Die Meta-Antwort ist: Die Parameter von den geerbten Typen zu übernehmen würde Funktionen nicht nur inkonsistent machen, sondern auch so etwas verhindern:</p>
<pre><code class="language-cpp">struct A { A(int i); };
struct B : public A { B() : A(42) {} };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195851</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 27 Mar 2012 13:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 13:15:11 GMT]]></title><description><![CDATA[<p>arghonaut schrieb:</p>
<blockquote>
<p>RuggedC schrieb:</p>
<blockquote>
<p>Eine Frage bleibt: wieso muss ich bei jedem Konstruktor der Unterklassen die alten parameter erneut hineinschreiben. Was hat das dann noch mit Vererbng zu tun? Weil wir doch über &quot;:Katalog(Verfasser, Titel)&quot; diese Parameter weitergeben?!</p>
</blockquote>
<p>Ist halt so. Die Basis wird normalerweise automatisch initialisiert, dafür muss aber ein Defaultkonstruktor verfügbar sein. Ist hier aber nicht der Fall, weshalb du die Basis selber intialisieren musst.</p>
</blockquote>
<p>Ich hab mir das jetzt so gedacht, dass er an der stelle</p>
<pre><code class="language-cpp">public: 
		KatalogBuch(string Verfasser, string Titel, string ISBN) 
        : Katalog(Verfasser, Titel) 
        , ISBN(ISBN)
</code></pre>
<p>einen &quot;string Verfasser&quot; und einen &quot;string Titel&quot; initialisiert, der dann aber quasi die &quot;Werte&quot; bzw den Inhalt aus der oberklasse erbt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195852</guid><dc:creator><![CDATA[RuggedC]]></dc:creator><pubDate>Tue, 27 Mar 2012 13:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen &amp;amp; Vererbung Problem on Tue, 27 Mar 2012 14:06:21 GMT]]></title><description><![CDATA[<p>&quot;Verfasser&quot; und &quot;Titel&quot; (also die Parameter der KatalogBuch-Konstruktors) werden an der Stelle nicht initialisiert. Das geschieht noch bevor irgend ein Objekt initialisiert wird. Und &quot;Werte vererben&quot; geht sowieso nicht. Werte sind Zustände von Objekten, und Zustände kann man haben, aber nicht erben.<br />
Außerdem ist in C++ (und wahrscheinlich in vielen anderen OOP-Sprachen) jede Klasse für ihre Member selbst verantwortlich. Das ist ja eben das schöne dabei: KatalogBuch erbt von Katalog. Katalog erfüllt seinen Teil, in dem Fall &quot;Verfasser&quot; und &quot;Name&quot; verwalten. Der Katalog-Konstruktor nimmt Parameter entgegen und kümmert sich dann darum, dass mit diesen was sinnvolles angefangen wird.<br />
Und geerbt wird an der Stelle sowieso nicht. Das ist eine simple Definition einer Methode (wenn auch einer speziellen - einem Kostruktor). Und die Syntax ist halt mal so, wenn du einen bestimmten Konstruktor der Basisklasse aufrufen musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195864</guid><dc:creator><![CDATA[arghonaut]]></dc:creator><pubDate>Tue, 27 Mar 2012 14:06:21 GMT</pubDate></item></channel></rss>