<?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[Vererbung und Konstruktor]]></title><description><![CDATA[<p>Hi!</p>
<p>Habe eine Anfänger-Verständnisfrage zu abgeleiteten Klassen bzw. dem zugehörigen Konstruktor.<br />
Aus einem Lehrbuch habe ich folgenden Header (Auszug) zur Basisklasse &quot;GraphObj&quot;. (Der hier eingebundene header &quot;Ort.h&quot; sollte für das Verständnis nicht weiter wichtig bzw. selbsterklärend sein).</p>
<pre><code class="language-cpp">#ifndef graphobj_h
#define graphobj_h
#include &quot;ort.h&quot;

class GraphObj
{
public:
    GraphObj(const Ort &amp;einOrt)
		: Referenzkoordinaten(einOrt) {}

    // alten Bezugspunkt ermitteln und gleichzeitig neuen wählen
    Ort Bezugspunkt(const Ort &amp;nO)
    {
        Ort temp = Referenzkoordinaten;
        Referenzkoordinaten = nO;
        return temp;
    }

private:
    Ort Referenzkoordinaten;
};
#endif   // graphobj_h
</code></pre>
<p>Der Header zur davon abgeleiteten Klasse (ebenfalls Auszug) sieht folgendermaßen aus (auch aus dem Lehrbuch):</p>
<pre><code class="language-cpp">#ifndef strecke_h
#define strecke_h strecke_h
#include &quot;graphobj.h&quot;

class Strecke : public GraphObj
{
public:
	Strecke(const Ort &amp;Ort1, const Ort &amp;Ort2)
	{
		Bezugspunkt(Ort1);
		Endpunkt = Ort2;
	}
	/*
	Strecke(const Ort &amp;Ort1, const Ort &amp;Ort2)
		: GraphObj(Ort1), Endpunkt(Ort2){}
	*/

private:
	Ort Endpunkt;             
};
#endif // strecke_h
</code></pre>
<p>Meine Frage bezieht sich nun auf den Konstruktor der abgeleiteten Klasse. Wenn ich es richtig verstanden habe, wird beim Aufruf des Konstruktors der abgeleiteten Klasse zunächst automatisch der Konstruktor der Basisklasse aufgerufen. Die in &quot;Strecke.h&quot; auskommentierte Konstruktorvariante mit Initialisierungsliste verstehe ich. Die Zeile</p>
<pre><code class="language-cpp">Bezugspunkt(Ort1);
</code></pre>
<p>in der tatsächlich implementierten Version verstehe ich allerdings nicht. Die Elementfunktion Bezugspukt gibt ein Objekt vom Typ Ort zurück. Muss denn dieses Objekt nicht noch irgendwie zugewiesen werden? Die abgeleitete Klasse hat zwar keinen Zugriff auf die privaten Daten der Basisklasse, aber woraus wird klar, dass die Rückgabe von &quot;Bezugspunkt(Ort1);&quot; den &quot;Referenzkoordinaten&quot; zugewiesen wird. Was wäre, wenn es mehrere private Attribute in der Basisklasse gäbe?</p>
<p>Wäre nett, wenn mir das jemand erklären könnte.<br />
Danke schonmal vorab und sorry für den vielen Text.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127563/vererbung-und-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 04:19:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127563.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Nov 2005 11:47:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 11:47:40 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Habe eine Anfänger-Verständnisfrage zu abgeleiteten Klassen bzw. dem zugehörigen Konstruktor.<br />
Aus einem Lehrbuch habe ich folgenden Header (Auszug) zur Basisklasse &quot;GraphObj&quot;. (Der hier eingebundene header &quot;Ort.h&quot; sollte für das Verständnis nicht weiter wichtig bzw. selbsterklärend sein).</p>
<pre><code class="language-cpp">#ifndef graphobj_h
#define graphobj_h
#include &quot;ort.h&quot;

class GraphObj
{
public:
    GraphObj(const Ort &amp;einOrt)
		: Referenzkoordinaten(einOrt) {}

    // alten Bezugspunkt ermitteln und gleichzeitig neuen wählen
    Ort Bezugspunkt(const Ort &amp;nO)
    {
        Ort temp = Referenzkoordinaten;
        Referenzkoordinaten = nO;
        return temp;
    }

private:
    Ort Referenzkoordinaten;
};
#endif   // graphobj_h
</code></pre>
<p>Der Header zur davon abgeleiteten Klasse (ebenfalls Auszug) sieht folgendermaßen aus (auch aus dem Lehrbuch):</p>
<pre><code class="language-cpp">#ifndef strecke_h
#define strecke_h strecke_h
#include &quot;graphobj.h&quot;

class Strecke : public GraphObj
{
public:
	Strecke(const Ort &amp;Ort1, const Ort &amp;Ort2)
	{
		Bezugspunkt(Ort1);
		Endpunkt = Ort2;
	}
	/*
	Strecke(const Ort &amp;Ort1, const Ort &amp;Ort2)
		: GraphObj(Ort1), Endpunkt(Ort2){}
	*/

private:
	Ort Endpunkt;             
};
#endif // strecke_h
</code></pre>
<p>Meine Frage bezieht sich nun auf den Konstruktor der abgeleiteten Klasse. Wenn ich es richtig verstanden habe, wird beim Aufruf des Konstruktors der abgeleiteten Klasse zunächst automatisch der Konstruktor der Basisklasse aufgerufen. Die in &quot;Strecke.h&quot; auskommentierte Konstruktorvariante mit Initialisierungsliste verstehe ich. Die Zeile</p>
<pre><code class="language-cpp">Bezugspunkt(Ort1);
</code></pre>
<p>in der tatsächlich implementierten Version verstehe ich allerdings nicht. Die Elementfunktion Bezugspukt gibt ein Objekt vom Typ Ort zurück. Muss denn dieses Objekt nicht noch irgendwie zugewiesen werden? Die abgeleitete Klasse hat zwar keinen Zugriff auf die privaten Daten der Basisklasse, aber woraus wird klar, dass die Rückgabe von &quot;Bezugspunkt(Ort1);&quot; den &quot;Referenzkoordinaten&quot; zugewiesen wird. Was wäre, wenn es mehrere private Attribute in der Basisklasse gäbe?</p>
<p>Wäre nett, wenn mir das jemand erklären könnte.<br />
Danke schonmal vorab und sorry für den vielen Text.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/926884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/926884</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Fri, 25 Nov 2005 11:47:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 12:05:51 GMT]]></title><description><![CDATA[<p>Schau dir mal die Methode &quot;GraphObj::Bezugspunkt()&quot; an - die setzt die Referenzkoordinaten auf einen neuen Wert und liefert deren alten Wert zurück - sprich: Da ist die Zuweisung schon enthalten.</p>
<p>btw glaube ich nicht, daß sich das Beispiel so compilieren lässt. GraphObj hat keinen Default-Konstruktor, also mußt du es aus der Initialisierungsliste heraus konstruieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/926896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/926896</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 25 Nov 2005 12:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 12:09:06 GMT]]></title><description><![CDATA[<p>Rückgabewerte von Methoden/Funktionen muss man nicht benutzen.<br />
Wenn ich mir das so anschau, dürfte das ganze hier nen Compilefehler geben, weil GraphObj keinen Standardkonstruktor hat, Strecke diesen aber benötigen würde bei der dort stehenden Klasse.</p>
<p>edit: misst zu spät^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/926901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/926901</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Fri, 25 Nov 2005 12:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 12:08:39 GMT]]></title><description><![CDATA[<p>Mit</p>
<pre><code class="language-cpp">Bezugspunkt(Ort1);
</code></pre>
<p>wird die Funktion 'Bezugspunkt' aus der Basisklasse aufgerufen. Der Rückgabewert der Funktion wird ignoriert (Das ist erlaubt.).<br />
Die Zuweisung des im Parameter übergebenen 'Ort1' an 'Referenzkoordinaten' erfolgt innerhalb der Funktion und hat nichts mit dem Rückgabewert zu tun.<br />
Dazu solltest Du Dir nochmal die Funktion 'Bezugspunkt' ansehen.</p>
<p>DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/926902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/926902</guid><dc:creator><![CDATA[DJohn]]></dc:creator><pubDate>Fri, 25 Nov 2005 12:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 16:32:48 GMT]]></title><description><![CDATA[<p>Danke für die Hinweise! Eingermaßen verstanden habe ich das jetzt, denke ich.</p>
<p>Nachhaken möchte ich aber trotzdem noch einmal <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="😉"
    /> :</p>
<p>Zunächst zur Ignorierung des Rückgabewerts der Funktion &quot;Bezugspunkt&quot;. Normalerweise müsste diese Methode doch für ein Objekt aufgerufen werden, z.B.:</p>
<pre><code class="language-cpp">x.Bezugspunkt(Ort1); // x sei vom Typ GraphObj
</code></pre>
<p>Dass ich den Rückgabewert ignoriere äußert sich also schon darin, dass hier die Methode NICHT für ein bestimmtes Objekt aufgerufen wird, richtig??</p>
<p>Dann zu eurer Anmerkung bezüglich des fehlenden Standarkonstruktors (Beispiel ist tatsächlich aus diesem Grund nicht compilierbar):<br />
ich denke das ist genau das, was mich irritiert hat. Die Methode &quot;Bezugspunkt&quot; führt nur die Zuweisung aus, allerdings ist zu diesem Zeitpunkt noch gar kein &quot;GraphObj&quot; mit seinem Attribut &quot;Referenzkoordinaten&quot; erzeugt worden. Wäre also ein Standardkonstruktor für &quot;GraphObj&quot; vorhanden, würde beim Aufruf des Konstruktors von &quot;Strecke&quot; der &quot;Anfangspunkt&quot; erzeugt und mit (beliebigen) Werten initialisiert. Anschließend erfogte die Zuweisung neuer Werte über die Anweisung</p>
<pre><code class="language-cpp">Bezugspunkt(Ort1);
</code></pre>
<p>Ist das korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927131</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Fri, 25 Nov 2005 16:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 16:39:57 GMT]]></title><description><![CDATA[<p>Nanuq schrieb:</p>
<blockquote>
<p>Dass ich den Rückgabewert ignoriere äußert sich also schon darin, dass hier die Methode NICHT für ein bestimmtes Objekt aufgerufen wird, richtig??</p>
</blockquote>
<p>die funktion wird für ein bestimmtes objekt aufgerufen, nämlich für *this.</p>
<pre><code class="language-cpp">Bezugspunkt(Ort1);
//ist äquivalent zu
this-&gt;Bezugspunkt(Ort1);
</code></pre>
<p>und dass das funktioniert liegt daran, dass Strecke von GraphObj abgeleitet ist.</p>
<p>zum rückgabewert: der kann einfach ignoriert werden (also nicht weiterverarbeitet)<br />
beispiel</p>
<pre><code class="language-cpp">int foo ()
{
 return 42;
}

int main ()
{
   foo(); //ich interessiere mich einfach nicht für den rückgabewert, also wozu sollte ich den in einer variable speichern?
}
</code></pre>
<blockquote>
<p>...<br />
Ist das korrekt?</p>
</blockquote>
<p>ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927135</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Fri, 25 Nov 2005 16:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 16:41:42 GMT]]></title><description><![CDATA[<p>davie schrieb:</p>
<blockquote>
<blockquote>
<p>...<br />
Ist das korrekt?</p>
</blockquote>
<p>ja.</p>
</blockquote>
<p>nicht ganz, denn zu dem zeitpunkt, wo Bezugspunkt aufgerufen wird, gäbe es schon ein GraphObj. aber da sich die frage nicht stellt, weil der code ohne standardkonstruktor nicht kompiliert bleibe ich bei ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927136</guid><dc:creator><![CDATA[davie]]></dc:creator><pubDate>Fri, 25 Nov 2005 16:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung und Konstruktor on Fri, 25 Nov 2005 16:43:13 GMT]]></title><description><![CDATA[<p>Hervorragend, dann habe ich es jetzt engültig begriffen.</p>
<p>Herzlichen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927137</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Fri, 25 Nov 2005 16:43:13 GMT</pubDate></item></channel></rss>