<?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]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin neu hier und habe gleich eine Frage an Euch.</p>
<p>Ich habe eine Klasse A. Davon abgeleitet eine Klasse B. Jetzt habe ich ein Objekt vom Typ A, möchte daraus aber ein Objekt vom Typ B machen. Wie kann ich soetwas bewerkstelligen?</p>
<p>Mir schwebt ein Konstruktor in B vor, dem ich das Objekt vom Typ A übergebe. Also in etwa so:</p>
<pre><code class="language-cpp">A a = new A();
B b = new B(a);
</code></pre>
<p>Und ich möchte nicht, daß das Objekt a kopiert wird.</p>
<p>Geht das?</p>
<p>Gruß,<br />
Wonko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263162/vererbung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 20:29:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263162.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Mar 2010 17:24:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 17:24:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin neu hier und habe gleich eine Frage an Euch.</p>
<p>Ich habe eine Klasse A. Davon abgeleitet eine Klasse B. Jetzt habe ich ein Objekt vom Typ A, möchte daraus aber ein Objekt vom Typ B machen. Wie kann ich soetwas bewerkstelligen?</p>
<p>Mir schwebt ein Konstruktor in B vor, dem ich das Objekt vom Typ A übergebe. Also in etwa so:</p>
<pre><code class="language-cpp">A a = new A();
B b = new B(a);
</code></pre>
<p>Und ich möchte nicht, daß das Objekt a kopiert wird.</p>
<p>Geht das?</p>
<p>Gruß,<br />
Wonko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1869973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1869973</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Tue, 16 Mar 2010 17:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 17:27:23 GMT]]></title><description><![CDATA[<p>Ich wüsste nicht warum das nicht gehen sollte.</p>
<p>Wenn du den Konstruktor selbst deklartierst, wird ihn der Compiler nicht selbst erzeugen und das tun, was du willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1869975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1869975</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 16 Mar 2010 17:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 17:58:33 GMT]]></title><description><![CDATA[<p>Solange im Constructor von B eine Referenz als Parameter steht, wird nichts kopiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1869992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1869992</guid><dc:creator><![CDATA[crt32]]></dc:creator><pubDate>Tue, 16 Mar 2010 17:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 18:31:01 GMT]]></title><description><![CDATA[<p>Ein B ist doch ein A. Überall wo ein A erwartet wird kannst Du ein B nehmen.</p>
<p>B *b=new B;<br />
A *a=b;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870005</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Tue, 16 Mar 2010 18:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 23:27:12 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>Wenn du den Konstruktor selbst deklartierst, wird ihn der Compiler nicht selbst erzeugen und das tun, was du willst.</p>
</blockquote>
<p>Aber wie muß der Konstruktor aussehen? Nur a übergeben bringt ja nicht so viel.</p>
<pre><code class="language-cpp">class A {
public:
	int i;
};

class B : public A {

public:
	B (A *a) {
            // ???????
	}
};

int main() {

	A *a = new A();
	a-&gt;i = 5;

	B *b = new B(a);
	cout &lt;&lt; b-&gt;i &lt;&lt; endl; //gibt 0 aus.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870129</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Tue, 16 Mar 2010 23:27:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Tue, 16 Mar 2010 23:28:47 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>Ein B ist doch ein A. Überall wo ein A erwartet wird kannst Du ein B nehmen.</p>
</blockquote>
<p>Ich habe ein a, will es aber um die Eigenschaften von b erweitern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870131</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Tue, 16 Mar 2010 23:28:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Wed, 17 Mar 2010 07:45:48 GMT]]></title><description><![CDATA[<p>WonkoTheSane schrieb:</p>
<blockquote>
<p>Aber wie muß der Konstruktor aussehen?</p>
</blockquote>
<p>Als Parameter eine const-Referenz und dann den Basis-Ctor aufrufen, also so:</p>
<pre><code class="language-cpp">B(const A&amp; a) : A(a)
// hier B-Krams initialisieren
{}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870160</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 17 Mar 2010 07:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Wed, 17 Mar 2010 09:21:21 GMT]]></title><description><![CDATA[<p>WonkoTheSane schrieb aber, daß er das Objekt a <strong>nicht</strong> kopieren möchte... und das geht eben nicht!<br />
Denn das neu erzeugte Objekt b besteht ja intern aus dem dazugehörigen Speicher für die Basisklasse A und dahinter (oder davor - auf jeden Fall aber am Stück!) aus dem Spicher für die Member von B.<br />
Nun kann aber nachträglich nicht einfach der Speicher hinter dem Objekt a einfach überschrieben werden, da dieser ja evtl. zu einem anderen Objekt schon gehört.</p>
<p>Wenn der Kopieraufwand für das Objekt a zu groß ist (bzw. sogar unkopierbar), dann kann man ja einfach eine Referenz oder einen Zeiger in der Klasse B dafür anlegen (dann aber nicht mehr von A ableiten!).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870196</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 17 Mar 2010 09:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Wed, 17 Mar 2010 15:48:28 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Wenn der Kopieraufwand für das Objekt a zu groß ist (bzw. sogar unkopierbar), dann kann man ja einfach eine Referenz oder einen Zeiger in der Klasse B dafür anlegen (dann aber nicht mehr von A ableiten!).</p>
</blockquote>
<p>Meinem Eindruck nach wäre das ohnehin sinnvoll. Keine Vererbung, und dafür Aggregation.</p>
<p>@ WonkoTheSane:<br />
Wieso möchtest du ein B von einem A konstruieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870437</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 17 Mar 2010 15:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Fri, 19 Mar 2010 15:09:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a>: OK, das mit der Speicherverwaltung leuchtet mir ein.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wieso möchtest du ein B von einem A konstruieren?</p>
</blockquote>
<p>Z.B. arbeite ich mit dem Qt-Framework. Für den Datenbankzugriff gibt es ein QSqlTableModel. Das repräsentiert die Tabelle. Eine Zeile wird durch einen QSqlRecord repräsentiert.</p>
<p>Mit</p>
<pre><code class="language-cpp">tableModel.record(0).fieldName(&quot;id&quot;)
</code></pre>
<p>greife ich auf die Spalte &quot;id&quot; in der ersten Zeile zu.</p>
<p>Meine Idee war, ein typisiertes TableModel mit einem typisierten QSqlRecord abzuleiten, so dass ich den Spaltennamen nicht als String angeben muss.</p>
<p>Also:</p>
<pre><code class="language-cpp">tableModel.record(0).id
</code></pre>
<p>So würden falsche Feldnamen schon beim compilieren auffallen. Ich bin nicht sicher, ob es eine gute Idee ist, wenn ich dazu jeden QSqlRecord kopieren muss. Besonders wenn man sie zur Verarbeitung in einer Schleife durchläuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871335</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Fri, 19 Mar 2010 15:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Fri, 19 Mar 2010 15:38:17 GMT]]></title><description><![CDATA[<p>Du könntest vllt von QSqlTableModel ableiten welches spezialierte/typisierte QSqlRecord liefert. Hört sich aber nach einer Menge Schreibarbeit an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871352</guid><dc:creator><![CDATA[witte]]></dc:creator><pubDate>Fri, 19 Mar 2010 15:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Fri, 19 Mar 2010 15:57:39 GMT]]></title><description><![CDATA[<p>witte schrieb:</p>
<blockquote>
<p>Du könntest vllt von QSqlTableModel ableiten welches spezialierte/typisierte QSqlRecord liefert. Hört sich aber nach einer Menge Schreibarbeit an.</p>
</blockquote>
<p>In der abgeleiteten Klasse muss ich dazu aber immer noch aus dem QSqlRecord einen typisierten machen.</p>
<p>Die Schreibarbeit könnte man automatisieren. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1871364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871364</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Fri, 19 Mar 2010 15:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Fri, 19 Mar 2010 16:17:04 GMT]]></title><description><![CDATA[<p>WonkoTheSane schrieb:</p>
<blockquote>
<p>In der abgeleiteten Klasse muss ich dazu aber immer noch aus dem QSqlRecord einen typisierten machen.</p>
</blockquote>
<p>Nein, die abgleitete QSqlTableModel soll gleich abgeleitete QSqlRecord liefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871377</guid><dc:creator><![CDATA[witte]]></dc:creator><pubDate>Fri, 19 Mar 2010 16:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Fri, 19 Mar 2010 16:26:42 GMT]]></title><description><![CDATA[<p>witte schrieb:</p>
<blockquote>
<p>Nein, die abgleitete QSqlTableModel soll gleich abgeleitete QSqlRecord liefern.</p>
</blockquote>
<p>Hmm. Irgendwie stehe ich auf dem Schlauch. Wie soll das denn gehen? Ich habe doch nur die QSqlRecords aus der Basisklasse.</p>
<p>So sieht das aus:<br />
<a href="http://doc.trolltech.com/4.6/qsqltablemodel-members.html" rel="nofollow">http://doc.trolltech.com/4.6/qsqltablemodel-members.html</a></p>
<p>(siehe record ( int ) const : QSqlRecord )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871381</guid><dc:creator><![CDATA[WonkoTheSane]]></dc:creator><pubDate>Fri, 19 Mar 2010 16:26:42 GMT</pubDate></item></channel></rss>