<?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[Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wenn man zwei Klasse wie diese hier hat:</p>
<pre><code class="language-cpp">class B
{
  private:
   double dataB;
  public:
   double GetDataB() const;
}

class A
{
  private:
    double dataA;
    B MyClassB;
  public:
   doouble GetDataA() const;
}
</code></pre>
<p>Dies entspricht ja am ehesten dem OOP Konzept und in allen Büchern wird geraden soweit es geht ausschließlich die &quot;Ist ein&quot; Vererbung also private durchzuführen.</p>
<p>Allerdings fällt mir hierbei nichts besseres ein wenn ich auf dataB der Klasse B zugreifen möchte als die Funktion durchzuschleifen:</p>
<pre><code class="language-cpp">A::GetDataB() const
{
  return B.GetDataB();
}
</code></pre>
<p>gibt es da einen besseren Weg oder sollte man sich ein anderes Klassendesign suchen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289952/pattern-für-öffentlichen-zugriff-auf-öffentliche-schnittstellen-von-private-membern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 19:59:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289952.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Jul 2011 08:31:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:31:04 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>wenn man zwei Klasse wie diese hier hat:</p>
<pre><code class="language-cpp">class B
{
  private:
   double dataB;
  public:
   double GetDataB() const;
}

class A
{
  private:
    double dataA;
    B MyClassB;
  public:
   doouble GetDataA() const;
}
</code></pre>
<p>Dies entspricht ja am ehesten dem OOP Konzept und in allen Büchern wird geraden soweit es geht ausschließlich die &quot;Ist ein&quot; Vererbung also private durchzuführen.</p>
<p>Allerdings fällt mir hierbei nichts besseres ein wenn ich auf dataB der Klasse B zugreifen möchte als die Funktion durchzuschleifen:</p>
<pre><code class="language-cpp">A::GetDataB() const
{
  return B.GetDataB();
}
</code></pre>
<p>gibt es da einen besseren Weg oder sollte man sich ein anderes Klassendesign suchen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093511</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:31:04 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:41:15 GMT]]></title><description><![CDATA[<p>Das &quot;Ist ein&quot;-Konzept wird, wie du korrekt beschreibst, durch public-Vererbung umgesetzt. Du hast hier aber ein &quot;Hat ein&quot;-Konzept durch Komposition eingesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093514</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:36:54 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Das &quot;Ist ein&quot;-Konzept wird, wie du korrekt beschreibst, durch private-Vererbung umgesetzt. Du hast aber ein &quot;Hat ein&quot;-Konzept eingesetzt.</p>
</blockquote>
<p>Sorry, ich habe jetzt zwei Fragen die ich parallel in zwei Posts posten wollte durcheinander gebracht. Ist wohl noch zu früh. Danke für den Hinweis</p>
<p>Gibt es dennoch irgendwie was besseres als Funktionen durchzuschleifen oder soll ich ich:</p>
<pre><code class="language-cpp">class A : public B
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2093515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093515</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:38:42 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Das &quot;Ist ein&quot;-Konzept wird, wie du korrekt beschreibst, durch private-Vererbung umgesetzt. Du hast hier aber ein &quot;Hat ein&quot;-Konzept durch Komposition eingesetzt.</p>
</blockquote>
<p>Bin ich noch nicht richtig wach?</p>
<p>notsmart: Die übliche Vererbungsmethode ist public.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093516</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:41:05 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Das &quot;Ist ein&quot;-Konzept wird, wie du korrekt beschreibst, durch private-Vererbung umgesetzt. Du hast hier aber ein &quot;Hat ein&quot;-Konzept durch Komposition eingesetzt.</p>
</blockquote>
<p>Bin ich noch nicht richtig wach?</p>
<p>notsmart: Die übliche Vererbungsmethode ist public.</p>
</blockquote>
<p>Nein, ich war noch nicht richtig wach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093518</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:43:04 GMT]]></title><description><![CDATA[<p>Nochmal langsam:<br />
&quot;Ist ein&quot; wird durch öffentliche Vererbung umgesetzt - das heißt mit <code>class A : public B{...}</code> drückt du aus, daß A überall eingesetzt werden kann, wo B erwartet wird.<br />
Du hast dort eine &quot;hat ein&quot;-Beziehung. Und normalerweise ist die Tatsache, welche Hilfsobjekte A tatsächlich verwendet, nur irgendwo intern relevant. Wenn du einen Grund hast, aus A heraus die Innereien seiner Hilfsobjekte offenzulegen, dann kannst du es gerne explizit machen. Aber eventuell solltest du mal genauer erklären, was du <em>eigentlich</em> vorhast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093519</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:48:58 GMT]]></title><description><![CDATA[<p>notsmart schrieb:</p>
<blockquote>
<p>Gibt es dennoch irgendwie was besseres als Funktionen durchzuschleifen oder soll ich ich:</p>
<pre><code class="language-cpp">class A : public B
</code></pre>
</blockquote>
<p>Bei den ganzen Vererbungssachen geht es nicht (nur) um das technische Durchschleifen. Denk objektorientiert wie du etwas modellieren würdest und setz dann dieses Modell um. Wenn dein A ein B <strong>hat</strong>, dann mach Komposition wie oben. Normalerweise ist es dann auch gar nicht mehr nötig, einzeln die Eigenschaften von B abzufragen, denn das B ist ja ein Teil von A und somit seiner Eigenschaften. Wenn das nicht so ist, dann war die Modellierung &quot;A hat ein B&quot; wohl nicht so gut und vielleicht <strong>ist</strong> A ein B.</p>
<p>Wenn man nicht nur von A und B redet, sondern von konkreten Dingen, dann ist meistens ziemlich klar wie sie sich zueinander Verhalten:<br />
<a href="http://www.c-plusplus.net/forum/75672" rel="nofollow">http://www.c-plusplus.net/forum/75672</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093522</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 08:59:13 GMT]]></title><description><![CDATA[<p>Es geht um Orientierungen von zueinander in Bezug stehenden Kameras wobei jede Kamera eigene Parameter (Kamerakonstante,Hauptpunkt,Verzeichnungen) hat.</p>
<p>also habe ich folgenden &quot;ähnlichen&quot; Code:</p>
<pre><code class="language-cpp">class Kamera
{
  private:
    double focalLength;
    // ... usw
  public:
   double GetFocalLength() const { return focalLength; }
   void   SetFocalLength(double c) const
   {
     if(c &gt; 0)
     {
       focalLength = c;
       return;
     }
     // ...
   }
}

class RO
{
  private:
   vector&lt;Kamera&gt; cams;
   // weitere member
  public:
   bool calculate();
}
</code></pre>
<p>Dann gibt es weitere Klassen wie Absolute und Äußere Orientierung die alle auf die Kameradaten mit const Get zugreifen möchten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093527</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 08:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 14:37:20 GMT]]></title><description><![CDATA[<p>Wollen die auf eine bestimmte Kamera zugreifen oder ist es völlig willkürlich und RO auch nicht bekannt, welche das sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093624</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 16 Jul 2011 14:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 19:09:15 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Wollen die auf eine bestimmte Kamera zugreifen oder ist es völlig willkürlich und RO auch nicht bekannt, welche das sind?</p>
</blockquote>
<p>Sagen wir mal so selbst wenn der Vector weg &quot;wäre&quot;, würde ich gerne auf die Kamera frei zugreifen wollen. Anscheinend gibt es aber da kein sinnvolles Konzept außer vielleicht protected vererbung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093698</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 19:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 19:14:46 GMT]]></title><description><![CDATA[<p>Was mir eventuell einfallen würde, wäre eine Zugriffsmethode um die Kamera(s) erreichen zu können:</p>
<pre><code class="language-cpp">class RO
{
private:
  vector&lt;Kamera&gt; cams;
  // weitere member
public:
  bool calculate();
  Kamera&amp; getKamera(size_t i) { return cams.at(i); }
};
</code></pre>
<p>Vererbung ist definitiv keine Universal-Lösung und sollte nur dann eingesetzt werden, wenn es unbedingt erforderlich ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093699</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 16 Jul 2011 19:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 20:15:28 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Was mir eventuell einfallen würde, wäre eine Zugriffsmethode um die Kamera(s) erreichen zu können:</p>
<pre><code class="language-cpp">class RO
{
private:
  vector&lt;Kamera&gt; cams;
  // weitere member
public:
  bool calculate();
  Kamera&amp; getKamera(size_t i) { return cams.at(i); }
};
</code></pre>
<p>Vererbung ist definitiv keine Universal-Lösung und sollte nur dann eingesetzt werden, wenn es unbedingt erforderlich ist</p>
</blockquote>
<p>Für mich impliziert Get immer const zeiger oder const referenz. Macht man das tatsächlich so wie du es oben beschreibst? Damit kannst du Kamera genau so in den public Bereich schieben weil man damit die Datenkapselung unterwandert. Ich habe da aber nicht so die Erfahrung. Sammle daher Anregungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093708</guid><dc:creator><![CDATA[notsmart]]></dc:creator><pubDate>Sat, 16 Jul 2011 20:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sat, 16 Jul 2011 20:25:13 GMT]]></title><description><![CDATA[<p>Du willst dem Nutzer doch Zugriff auf die Methoden der Member anbieten. Das heißt, du mußt entweder die Methoden selber schreiben und an die Kamera(s) weiterleiten oder du gibst dem Nutzer Direktzugriff auf die Kamera, damit er deren Methoden aufrufen kann.</p>
<p>PS: Wenn du dir Sorgen über die Kapselung machst, warum kommst du dann mit Vererbungs-Lösungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093711</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 16 Jul 2011 20:25:13 GMT</pubDate></item><item><title><![CDATA[Reply to Pattern für öffentlichen Zugriff auf öffentliche Schnittstellen von private Membern on Sun, 17 Jul 2011 09:51:04 GMT]]></title><description><![CDATA[<p>Meine Frage zielte darauf, wozu diese Klasse, die Kameras im Vektor verwaltet überhaupt da ist. Sinn macht für mich, wenn diese den Zugriff in der Form kapselt, dass es z.B. eine aktive Kamera gibt oder hier Kameras für verschiedene Viewports eingestellt werden können usw.</p>
<p>Wenn das Ding aber eine derartige Organisationskraft hat, wäre es fatal diese durch einen einfachen Getter zu unterwandern. Und wenn die Klasse nichts dergleichen tut, stellt sich mir die Frage, wozu es diese Klasse eigentlich gibt.</p>
<p>Was ist deren genaue Verantwortlichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093804</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 17 Jul 2011 09:51:04 GMT</pubDate></item></channel></rss>