<?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[Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich komme immer wieder mal in die Verlegenheit, dass ich aus einer Klasse auf Elemente der übergeordneten Klasse zugreifen will.</p>
<p>Bsp.:</p>
<p>class K1()<br />
{<br />
int A1;<br />
f1() // irgendeine Methode<br />
K2 B1 // K1 beinhaltet also K2<br />
}</p>
<p>class K2()<br />
{<br />
int A2;<br />
f2() // irgendeine Methode<br />
}</p>
<p>Klasse K1 hat also ein Element B1 vom Typ K2.<br />
Nun möchte ich gerne in f2() auf A1 zugreifen. Gibt es hierfür einen &quot;empfohlenen&quot; Weg?</p>
<p>Meine Lösung erweckt in mir immer den Eindruck schlechter Stil, bzw. ein Workaround zu sein. Ich lege in solchen Fällen in K2 eine Variable vom Typ *K1 an und trage im Konstruktor von K1 dort dessen Adresse ein. Dann habe ich über diesen Pointer Zugrff auf Elemente von K1.</p>
<p>Was ist hier der ästhetische Weg?</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292571/klassenentwurf-auf-elemente-der-übergeordneten-klasse-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 20:07:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292571.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Sep 2011 08:18:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 08:18:56 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich komme immer wieder mal in die Verlegenheit, dass ich aus einer Klasse auf Elemente der übergeordneten Klasse zugreifen will.</p>
<p>Bsp.:</p>
<p>class K1()<br />
{<br />
int A1;<br />
f1() // irgendeine Methode<br />
K2 B1 // K1 beinhaltet also K2<br />
}</p>
<p>class K2()<br />
{<br />
int A2;<br />
f2() // irgendeine Methode<br />
}</p>
<p>Klasse K1 hat also ein Element B1 vom Typ K2.<br />
Nun möchte ich gerne in f2() auf A1 zugreifen. Gibt es hierfür einen &quot;empfohlenen&quot; Weg?</p>
<p>Meine Lösung erweckt in mir immer den Eindruck schlechter Stil, bzw. ein Workaround zu sein. Ich lege in solchen Fällen in K2 eine Variable vom Typ *K1 an und trage im Konstruktor von K1 dort dessen Adresse ein. Dann habe ich über diesen Pointer Zugrff auf Elemente von K1.</p>
<p>Was ist hier der ästhetische Weg?</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118562</guid><dc:creator><![CDATA[martin_b]]></dc:creator><pubDate>Tue, 13 Sep 2011 08:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 08:20:28 GMT]]></title><description><![CDATA[<p>Membervariablen sollten immer private sein. Immer! Mach eine Funktion in der Basisklasse, die A1 zurückgibt, aber tu mir den Gefallen und nenne sie nicht &quot;getA1&quot;. (Siehe anderer Thread <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="😃"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118563</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 13 Sep 2011 08:20:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 09:11:18 GMT]]></title><description><![CDATA[<p>martin_b schrieb:</p>
<blockquote>
<p>Klasse K1 hat also ein Element B1 vom Typ K2.<br />
Nun möchte ich gerne in f2() auf A1 zugreifen. Gibt es hierfür einen &quot;empfohlenen&quot; Weg?</p>
</blockquote>
<p>Nein. Zumal ein K2 dem Desing nach nicht unbedingt mit einem K1 verbunden sein muss. Es wäre sogar möglich, eine Menge K2s zu haben, ohne jemals ein K1 zu erzeugen.</p>
<p>Du musst dem K2 also irgendwie mitteilen, auf welchen K1 er zugreifen soll, entweder &quot;fest&quot; als Klassenvariable und Übergabe im Konstruktor, oder nur beim Aufruf von f2() als Parameter. Zusätzlich musst du dem K2 eine Möglichkeit geben, den Wert des A1 in K1 zu ermitteln bzw. zu ändern (je nachdem).</p>
<p>Vielleicht ist aber auch ein ganz anderes Design angebracht. Leider hast du uns nur Beispielcode geliefert, ohne zu sagen, was du damit erreichen willst, und ohne zu zeigen, wie der Code denn nun <em>wirklich</em> aussieht. Lies zu dem Thema bitte auch den Link in meiner Signatur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118585</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 13 Sep 2011 09:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 10:25:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zunächst einmal herzlichen Dank an Euch beide für die Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23275">@314159265358979</a> natürlich mache ich meine Membervariablen private. Get und Set brauche ich nicht - ich verwende RAD-Studio (ehem. Borland C++ Builder) da gibt es properties. Aber das war ja auch gar nicht das Thema.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a><br />
Also ist die Lösung irgendwo einen Zeiger zu setzen (Parameter, Member oder Klassenvariable) nicht so unschön, wie mir es immer erscheint. Dann bin ich jetzt zwar nicht wirklich schlauer, aber das schlechte Gefühl ist weg. <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>Der Mini-Code sollte nur das Problem skizzieren, das ich schon in vielen Anwendungen hatte. Die wirklichen Codebeispiele wären viel Umfangreicher gewesen. Codebeispiele möglichst klein zu halten wird ja auch in Deinem Link empfohlen.</p>
<p>Möglicherweise würde in einigen Fällen ein anderer/besser Klassenentwurf das Problem an sich beseitigen.</p>
<p>Danke jedenfalls nochmals für Eure Meinung.</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118633</guid><dc:creator><![CDATA[martin_b]]></dc:creator><pubDate>Tue, 13 Sep 2011 10:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 10:29:40 GMT]]></title><description><![CDATA[<p>martin_b schrieb:</p>
<blockquote>
<p>Get und Set brauche ich nicht - ich verwende RAD-Studio (ehem. Borland C++ Builder) da gibt es properties.</p>
</blockquote>
<p>Bitte erklärs mir. Warum verwendet man nicht-Standard Erweiterungen. Ich verstehe es nicht. Das macht den Code nur unportabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118635</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 13 Sep 2011 10:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 12:26:56 GMT]]></title><description><![CDATA[<p>martin_b schrieb:</p>
<blockquote>
<p>Get und Set brauche ich nicht - ich verwende RAD-Studio (ehem. Borland C++ Builder) da gibt es properties.</p>
</blockquote>
<p>Gerade bei Properties sollte man Getter und Setter verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118694</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Tue, 13 Sep 2011 12:26:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 14:03:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Bitte erklärs mir. Warum verwendet man nicht-Standard Erweiterungen. Ich verstehe es nicht. Das macht den Code nur unportabel.</p>
</blockquote>
<p>Wenn portierbarkeit ein Thema wäre hättest Du natürlich vollkommen Recht. Aber ich verwende ohnehin auch massiv die VCL-Komponenten, da ist das Thema Portierbarkeit eh gegessen.</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118750</guid><dc:creator><![CDATA[martin_b]]></dc:creator><pubDate>Tue, 13 Sep 2011 14:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenentwurf: auf Elemente der übergeordneten Klasse zugreifen on Tue, 13 Sep 2011 14:14:46 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Gerade bei Properties sollte man Getter und Setter verwenden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Wenn sich durch das lesen/schreiben etwas in der Klasse ändert - ja.</p>
<p>Aber beim einfachen lesen/schreiben eines Variablenwertes kann man im Property aber direkt auf die Variable zugreifen:</p>
<pre><code>private:
bool FdrawBackground;
[...]
__property bool drawBackground = {read = FdrawBackground, write = FdrawBackground};
</code></pre>
<p>Aber das gehört jetzt vermutlich schon bald ins BCB-Forum.</p>
<p>Gruß</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2118757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2118757</guid><dc:creator><![CDATA[martin_b]]></dc:creator><pubDate>Tue, 13 Sep 2011 14:14:46 GMT</pubDate></item></channel></rss>