<?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[friend vermeiden?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bastele gerade wieder an meiner Engine und habe jetzt im Kopf, dass man friend vermeiden soll. Aber ich find's eigentlich ganz toll.</p>
<p>A)</p>
<p>Also Sinn macht die Vermeidung imo für friend-Klassen. Ich habe halt ein paar Klassen, die über Factorys erzeugt werden. Diese Klassen sind dann eben mit den zugehörigen Factory-Klassen befreundet. Das finde ich deswegen gut, weil:</p>
<ol>
<li>man die zu erzeugenden Klassen so nicht ohne die Factory erzeugen können soll, was ja gewünscht ist.</li>
<li>die Factorys außerdem alle Interna setzen müssen und ich es unschön finde, das alles über Setter und Getter zu lösen (die ja wiederum von anderen Klassen genutzt werden könnten, außer sie wären private)</li>
</ol>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /><br />
Häufiger nutze ich jetzt aber befreundete Funktionen. Z.B. habe ich eine CollisionBody-Klasse. Davon erben BoundingSphereTree und AABBTree, es gibt also verschiedene Kollisionsmöglichkeiten.</p>
<p>Jetzt soll ein Baum von BoundingSpheres mit einem Baum von BoundingBoxes kollidieren können usw. Da es nicht soo viele verschiedene Kollisionsobjekte gibt, habe ich das halt mit statischem DoubleDispatching (s. Artikel gelöst). Die Kollisionsfunktionen sollen jetzt natürlich die Interna kennen -&gt; einerseits von den Bäumen, andererseits aber auch von dem Modell, das zu dem Baum gehört. Hintergrund der notwendigen Modell-Informationen ist das Skelett des Modells, das wiederum die Bäume beeinflusst (wenn sich das Skelett durch Animation z.B. bewegt).</p>
<p>Daher finde ich auch hier friend ok. Ich habe halt Abhängigkeiten von Objekten zu freien Funktionen. Das ist ja nicht so schlimm, schätze ich.</p>
<p>Seht ihr da Probleme oder bessere Varianten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289540/friend-vermeiden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 02:53:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289540.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Jul 2011 10:52:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 11:30:05 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bastele gerade wieder an meiner Engine und habe jetzt im Kopf, dass man friend vermeiden soll. Aber ich find's eigentlich ganz toll.</p>
<p>A)</p>
<p>Also Sinn macht die Vermeidung imo für friend-Klassen. Ich habe halt ein paar Klassen, die über Factorys erzeugt werden. Diese Klassen sind dann eben mit den zugehörigen Factory-Klassen befreundet. Das finde ich deswegen gut, weil:</p>
<ol>
<li>man die zu erzeugenden Klassen so nicht ohne die Factory erzeugen können soll, was ja gewünscht ist.</li>
<li>die Factorys außerdem alle Interna setzen müssen und ich es unschön finde, das alles über Setter und Getter zu lösen (die ja wiederum von anderen Klassen genutzt werden könnten, außer sie wären private)</li>
</ol>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /><br />
Häufiger nutze ich jetzt aber befreundete Funktionen. Z.B. habe ich eine CollisionBody-Klasse. Davon erben BoundingSphereTree und AABBTree, es gibt also verschiedene Kollisionsmöglichkeiten.</p>
<p>Jetzt soll ein Baum von BoundingSpheres mit einem Baum von BoundingBoxes kollidieren können usw. Da es nicht soo viele verschiedene Kollisionsobjekte gibt, habe ich das halt mit statischem DoubleDispatching (s. Artikel gelöst). Die Kollisionsfunktionen sollen jetzt natürlich die Interna kennen -&gt; einerseits von den Bäumen, andererseits aber auch von dem Modell, das zu dem Baum gehört. Hintergrund der notwendigen Modell-Informationen ist das Skelett des Modells, das wiederum die Bäume beeinflusst (wenn sich das Skelett durch Animation z.B. bewegt).</p>
<p>Daher finde ich auch hier friend ok. Ich habe halt Abhängigkeiten von Objekten zu freien Funktionen. Das ist ja nicht so schlimm, schätze ich.</p>
<p>Seht ihr da Probleme oder bessere Varianten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089846</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 11:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 11:32:16 GMT]]></title><description><![CDATA[<p>Solange nicht jeder mit jedem &quot;friend&quot; ist, sehe ich da kein Problem. Aber z.B. 70 Klassen als friend zu deklarieren finde ich etwas übertrieben (hab ich so schon gesehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089870</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 07 Jul 2011 11:32:16 GMT</pubDate></item><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 11:45:27 GMT]]></title><description><![CDATA[<p>70? Also eine hat 70 Klassen-Freunde? Ist ja wie bei Facebook.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089877</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 11:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 11:59:11 GMT]]></title><description><![CDATA[<p>Ich versuche <code>friend</code> zwar generell zu vermeiden, aber manchmal ist es wirklich die beste Möglichkeit.</p>
<p>Viel schlimmer finde ich nämlich ein zerbloatetes Interface, das diverse Implementierungsdetails nach aussen reicht, nur um kein <code>friend</code> einsetzen zu müssen. Oder mehrere Funktionen, die das gleiche tun. Dann benutzt man lieber gezielt <code>friend</code> und erhöht sogar die Kapselung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089883</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 07 Jul 2011 11:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 12:14:11 GMT]]></title><description><![CDATA[<p>Genau, das war mein Gedanke. Die Alternative bestünde in zahlreichen Gettern und Settern. Das bläht die Klasse auf, sieht nicht schön aus und erinnert an Eclipse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089889</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 12:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to friend vermeiden? on Thu, 07 Jul 2011 13:03:58 GMT]]></title><description><![CDATA[<p>hat sich erledigt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2089918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2089918</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 07 Jul 2011 13:03:58 GMT</pubDate></item></channel></rss>