<?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[Zeiger auf private Klassenelemente als Rückgabewert?]]></title><description><![CDATA[<p>Ich habe zwei Klassen:</p>
<pre><code class="language-cpp">class Objekt{
 VERTEX* Punkte;
 unsigned Anzahl;
public:
 VERTEX* getPunkte(); // Ist das klug? Die Bildschirmklasse benötigt aber
   // AUSNAHMSWEISE Zugriff auf den Speicherbereich der Punkte, um sie in
   // einen Vertexbuffer speichern zu können
 unsigned getAnzahl();
};

class Bildschirm{
 Objekt* MehrereObjekte;
 unsigned Anzahl;
public:
 bool ObjektEinfuegen(Objekt&amp; Ein_Objekt){
  /* BLA BLA, irgendwann ist dann das hier notwendig:
   'Kopiere die Punkte von Ein_Objekt in den Vertexbuffer, also: */
  memcpy(temporaererVoidBuffer, 
     Ein_Objekt.getPunkte(), /* Liefert ja den Zeiger! */
     Ein_Objekt.getAnzahl() * sizeof (VERTEX));
};
</code></pre>
<p>Eigentlich sollte man ja keine Zeiger auf interne Daten zurückliefern, das führt ja das Konzept des 'Daten versteckens' sonst ad absurdum.<br />
Wie kann ich sicher stellen, dass der Aufrufer, wenn er den Zeiger erst einmal von der Funktion zurückgeliefert bekommen hat, damit keinen Unfug anstellen kann (s.h. nicht meine internen Daten schreibend manipulieren kann?)</p>
<p>Ist es klüger, die getPunkte() Funktion private zu machen und der Klasse Bildschirm mittels friend Deklaration ausnahmsweise zu gestatten, die Funktion aufzurufen?</p>
<p>Danke für Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170798/zeiger-auf-private-klassenelemente-als-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 05:29:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170798.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jan 2007 16:43:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf private Klassenelemente als Rückgabewert? on Fri, 19 Jan 2007 16:43:47 GMT]]></title><description><![CDATA[<p>Ich habe zwei Klassen:</p>
<pre><code class="language-cpp">class Objekt{
 VERTEX* Punkte;
 unsigned Anzahl;
public:
 VERTEX* getPunkte(); // Ist das klug? Die Bildschirmklasse benötigt aber
   // AUSNAHMSWEISE Zugriff auf den Speicherbereich der Punkte, um sie in
   // einen Vertexbuffer speichern zu können
 unsigned getAnzahl();
};

class Bildschirm{
 Objekt* MehrereObjekte;
 unsigned Anzahl;
public:
 bool ObjektEinfuegen(Objekt&amp; Ein_Objekt){
  /* BLA BLA, irgendwann ist dann das hier notwendig:
   'Kopiere die Punkte von Ein_Objekt in den Vertexbuffer, also: */
  memcpy(temporaererVoidBuffer, 
     Ein_Objekt.getPunkte(), /* Liefert ja den Zeiger! */
     Ein_Objekt.getAnzahl() * sizeof (VERTEX));
};
</code></pre>
<p>Eigentlich sollte man ja keine Zeiger auf interne Daten zurückliefern, das führt ja das Konzept des 'Daten versteckens' sonst ad absurdum.<br />
Wie kann ich sicher stellen, dass der Aufrufer, wenn er den Zeiger erst einmal von der Funktion zurückgeliefert bekommen hat, damit keinen Unfug anstellen kann (s.h. nicht meine internen Daten schreibend manipulieren kann?)</p>
<p>Ist es klüger, die getPunkte() Funktion private zu machen und der Klasse Bildschirm mittels friend Deklaration ausnahmsweise zu gestatten, die Funktion aufzurufen?</p>
<p>Danke für Tipps!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212788</guid><dc:creator><![CDATA[Schneee]]></dc:creator><pubDate>Fri, 19 Jan 2007 16:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf private Klassenelemente als Rückgabewert? on Fri, 19 Jan 2007 16:55:33 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Du kannst die Rausgabe auch in public-Bereich regulieren, einfach mal zum Thema Const-Correctness informieren.</p>
<pre><code class="language-cpp">const VERTEX* getPunkte() const;
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212796</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 19 Jan 2007 16:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf private Klassenelemente als Rückgabewert? on Fri, 19 Jan 2007 20:33:00 GMT]]></title><description><![CDATA[<p>Wenn ich<br />
{cpp]<br />
const XYZCOLOR* getPoint();<br />
[/cpp]</p>
<p>bin ich mir bezüglich des Typs des Rückgabewertes nicht sicher.</p>
<p>Wird dabei ein Zeiger auf ein <strong>konstantes XYZCOLOR</strong> Objekt zurückgegeben, oder wird ein <strong>konstanter Zeiger</strong> auf irgend ein XYZCOLOR Obkekt retourniert. Das ist ziemlich wichtig weil normalerweise nehm ich's mit der const-Correctness nicht so ernst, nur diesmal ist das Projekt sehr groß und ich muss sie befolgen. Eigentlich eine 50/50 Chance, was jetzt richtig ist:<br />
konstanter Zeiger auf ein Variables Objekt <strong>oder</strong> variabler Zeiger auf ein Konstantes Objekt?<br />
(btw. mir scheint es ist unvermeidbar, den Aufrufer grundlegend daran zu hindern, mit dem retournierten Zeiger Unfug zu treiben? Oder gibt's da ein Sprachmittel in C++ dagegen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212930</guid><dc:creator><![CDATA[Schneee]]></dc:creator><pubDate>Fri, 19 Jan 2007 20:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf private Klassenelemente als Rückgabewert? on Fri, 19 Jan 2007 21:05:07 GMT]]></title><description><![CDATA[<p>Schneee schrieb:</p>
<blockquote>
<p>Wenn ich</p>
<pre><code class="language-cpp">const XYZCOLOR* getPoint();
</code></pre>
<p>bin ich mir bezüglich des Typs des Rückgabewertes nicht sicher.</p>
<p>Wird dabei ein Zeiger auf ein <strong>konstantes XYZCOLOR</strong> Objekt zurückgegeben, oder wird ein <strong>konstanter Zeiger</strong> auf irgend ein XYZCOLOR Obkekt retourniert.</p>
</blockquote>
<p>Du kriegst einen variablen Zeiger auf ein konstantes Objekt zurück.</p>
<p>Siehe auch hier:</p>
<pre><code class="language-cpp">int j = 578;

int *p = &amp;j;  //Variabler Zeiger, variables Objekt

const int *p2 = &amp;j;  //Variabler Zeiger, konstantes Objekt
//int const *p2 = &amp;j;  //ebenso: Variabler Zeiger, konstantes Objekt

int * const p3 = &amp;j; //Konstanter Zeiger, variables Objekt

const int * const p4 = &amp;j;  //Konstanter Zeiger, konstantes Objekt
</code></pre>
<p>const-correctness sollte man im Übrigen immer eine große Bedeutung zukommen lassen.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212956</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Fri, 19 Jan 2007 21:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf private Klassenelemente als Rückgabewert? on Fri, 19 Jan 2007 21:19:37 GMT]]></title><description><![CDATA[<p>Das heißt der Aufrufer müsste den Zeiger auf das konstante Objekt zumindest explizit in einen Zeiger auf ein variables Objekt casten, um Unfug damit zu treiben? Das reicht mir:) Besten Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212968</guid><dc:creator><![CDATA[Schneee]]></dc:creator><pubDate>Fri, 19 Jan 2007 21:19:37 GMT</pubDate></item></channel></rss>