<?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[Klasse: protected, public usw.]]></title><description><![CDATA[<p>Bei meinem Projekt hab ich eine Spriteklasse, die mehrere public-Funktionen und 2 protected Variablen hat. Jetzt ist es ziemlich mühsam, wenn man z.B. die Position des Sprites herausfinden will, muss man immer Sprite-&gt;GetRect()-&gt;x; eingeben (die GetRect-Funktion gibt ein &amp;SDL_Rect zurück, indem die x-Koordinate gespeichert ist). Wäre es nicht einfacher, einfach Sprite-&gt;x zu schreiben und dafür öffentliche Variabeln zu erstellen? Mit Klassen hab ich eben noch nicht sehr viel Erfahrung. Ich weiss zwar, dass es zu Problemen kommen kann, wenn die Variabeln öffentlich zugänglich sind, doch wieso ist das eigentlich so? Weil sie aus Versehen geändert werden könnten? Ich denke, der Typ, von dem ich das habe, weiss schon Bescheid... Deshalb wollte ich euch fragen, wie ihr es handhabt mit Klassenfunktionen...</p>
<p>Ich freue mich auf eure Antworten...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180800/klasse-protected-public-usw</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 23:44:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180800.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 May 2007 20:15:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:15:54 GMT]]></title><description><![CDATA[<p>Bei meinem Projekt hab ich eine Spriteklasse, die mehrere public-Funktionen und 2 protected Variablen hat. Jetzt ist es ziemlich mühsam, wenn man z.B. die Position des Sprites herausfinden will, muss man immer Sprite-&gt;GetRect()-&gt;x; eingeben (die GetRect-Funktion gibt ein &amp;SDL_Rect zurück, indem die x-Koordinate gespeichert ist). Wäre es nicht einfacher, einfach Sprite-&gt;x zu schreiben und dafür öffentliche Variabeln zu erstellen? Mit Klassen hab ich eben noch nicht sehr viel Erfahrung. Ich weiss zwar, dass es zu Problemen kommen kann, wenn die Variabeln öffentlich zugänglich sind, doch wieso ist das eigentlich so? Weil sie aus Versehen geändert werden könnten? Ich denke, der Typ, von dem ich das habe, weiss schon Bescheid... Deshalb wollte ich euch fragen, wie ihr es handhabt mit Klassenfunktionen...</p>
<p>Ich freue mich auf eure Antworten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279935</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 06 May 2007 20:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:42:28 GMT]]></title><description><![CDATA[<p>Ich würde folgendes schreiben:</p>
<pre><code class="language-cpp">Sprite-&gt;getX(); 
Sprite-&gt;setX(wert);

//bzw
Sprite-&gt;X();
Sprite-&gt;X(wert);
</code></pre>
<p>der Vorteil ist, dass man nicht ausversehen eine Variable ändert(wie du schon sagtest). Der nächste Vorteil ist, dass du innerhalb der funktion machen kannst, was du willst. wenn du was an der Klasse änderst, fällt das von aussen nicht auf.</p>
<pre><code class="language-cpp">//Beispiel
class Sprite
{
    float getX()
    {
         return GetRect()-&gt;x;
    }
    //oder
    float getX()
    {
         return x;
    }
};
</code></pre>
<p>Der letzte Punkt ist, dass es auch nicht immer möglich ist, eine öffentliche variable zu deklarieren. Manchmal müssen, wenn eine Variable geändert wurde, auch andere Werte angepasst werden. Nur weis das Objekt nicht, wann eine öffentliche Variable geändert wurde, und müsste dann entweder eine &quot;update&quot; funktion einbauen, die nach jeder Variablen änderung vom nutzer aufgerufen werden muss, oder bei jeder verarbeitenden funktion erstmal testen ob sich werte geändert haben. An der Stelle sind halt getter/setter sinnvoller, weil die alles automatisch erledigen können.</p>
<p>Nun stell dir noch vor, dass du eine klasse hast, wo getter/setter und öffentliche variablen gemischt werden. das ist der absolute Horror. das kann sich kein Mensch merken, und dann gilt meine Signatur <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>
<p>//nachtrag<br />
Es gibt noch Propertys. das sind öffentliche Objekte, die die interne Variable nach aussen hin repräsentieren, und sich genauso verhalten, nur mit dem unterschied, dass sie keinen unkontrollierten zugriff bieten(man kann sie sich wie nen getter/setter paar mit verbesserter syntax vorstellen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279941</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 06 May 2007 20:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:43:19 GMT]]></title><description><![CDATA[<p>man sollte klassen jedoch nicht mit unnötigen get und set methoden aufblähen. anstatt es so wie mein vorposter zu machen hätte ich es so gemacht:</p>
<pre><code class="language-cpp">//Irgendeine Funktion in der du die X Koordinate des Sprites brauchst
void foo()
{
    Sprite sprite;
    SDL_Rect pos = sprite-&gt;getRect();

    //...
    if(pos.x &gt; sowieso)
    //...
}
</code></pre>
<p>Das erfordert keinen Stilpfusch und ist Leistungssparender als jedes ma die Get-methode aufzurufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279950</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 May 2007 20:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:46:45 GMT]]></title><description><![CDATA[<p>@TravisG du schlägst genau das vor, wovon der threadstarter weg wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.</p>
<blockquote>
<p>Das erfordert keinen Stilpfusch und ist Leistungssparender als jedes ma die Get-methode aufzurufen.</p>
</blockquote>
<p>ich seh hier keinens tilpfusch, klär mich auch. und in 99% aller Fälle ist meine Lösung nichtmal ansatzweise langsamer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279952</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 06 May 2007 20:46:45 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:48:46 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>@TravisG du schlägst genau das vor, wovon der threadstarter weg wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.</p>
<blockquote>
<p>Das erfordert keinen Stilpfusch und ist Leistungssparender als jedes ma die Get-methode aufzurufen.</p>
</blockquote>
<p>ich seh hier keinens tilpfusch, klär mich auch. und in 99% aller Fälle ist meine Lösung nichtmal ansatzweise langsamer.</p>
</blockquote>
<p>ich meinte mit dem pfusch nicht deine lösung sondern das publicsetzen von attributen. er wollte zudem weg von if(sprite-&gt;getRect()-&gt;x &gt; sowieso).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279953</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 May 2007 20:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 20:57:16 GMT]]></title><description><![CDATA[<p>in der gefahr, dass du einen edit überlesen könntest weil du genau dann postest während ich editiere, schreib ich mal ne antwort mit nem beispiel:</p>
<p>findest du</p>
<pre><code class="language-cpp">//Kollision zwischen 2 Sprites abfragen
bool checkForCollision(Sprite *sprite1,Sprite *sprite2)
{
	if(sprite1.getX() &gt; sprite2.getX() + sprite2.getW()) return false;
	if(sprite1.getY() &gt; sprite2.getY() + sprite2.getH()) return false;
	if(sprite1.getX() + sprite1.getW() &lt; sprite2.getX()) return false;
	if(sprite1.getY() + sprite1.getH()&lt; sprite2.getY()) return false;
	return true;
}
</code></pre>
<p>schöner als</p>
<pre><code class="language-cpp">//Kollision zwischen 2 Sprites abfragen
bool checkForCollision(Sprite *sprite1,Sprite *sprite2)
{
        SDL_Rect s1 = sprite1-&gt;getRect(), s2 = sprite2-&gt;getRect();

	if(s1.x &gt; s2.x + s2.w) return false;
	if(s1.y &gt; s2.y + s2.h) return false;
	if(s1.x + s1.w &lt; s2.x) return false;
	if(s1.y + s1.h &lt; s2.y)   return false;
	return true;
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279956</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 May 2007 20:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Sun, 06 May 2007 21:01:15 GMT]]></title><description><![CDATA[<p>TravisG schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>@TravisG du schlägst genau das vor, wovon der threadstarter weg wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.</p>
<blockquote>
<p>Das erfordert keinen Stilpfusch und ist Leistungssparender als jedes ma die Get-methode aufzurufen.</p>
</blockquote>
<p>ich seh hier keinens tilpfusch, klär mich auch. und in 99% aller Fälle ist meine Lösung nichtmal ansatzweise langsamer.</p>
</blockquote>
<p>ich meinte mit dem pfusch nicht deine lösung sondern das publicsetzen von attributen. er wollte zudem weg von if(sprite-&gt;getRect()-&gt;x &gt; sowieso).</p>
</blockquote>
<p>die sache mit dem stilpfusch ist akzeptiert. aber das zweite hat er immernoch. wenn er nur einen wert brauch, dann ist das anlegen einer zusätzlichen variable nicht ganz so praktisch, denn dann wird das genauso aussehen, wie vorher auch.</p>
<p>@deinen zweiten post. das 2. ist schöner, aber auch mit meiner Lösung(siehe nachtrag propertys) zu erreichen. Ohne propertys würde aus einem &quot;x&quot; ein &quot;x()&quot; werden, und damit kann ich leben.</p>
<p>//edit zumal du auch gemeinerweise bei deinen beispielen auch noch bei der namenswahl rumpfuscht, sodass du das zweite beispiel noch kompakter machst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279957</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 06 May 2007 21:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Mon, 07 May 2007 12:06:20 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Hilfe!</p>
<p>@ TravisG: Ist es nicht ein bisschen unpraktisch, wenn man zu jedem Sprite noch ein extra SDL_Rect erstellen muss, das sich ja sowieso gleich wie das in die Klasse integrierte verhält? Bei einem Sprite gehts ja noch, aber wenn da bei einem 2D-Game Unmengen von Sprites vorhanden sind und man für jedes noch ein separates Rect erstellen muss (klar kann mans), dann finde ich es ziemlich umständlich...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: Dein Vorschlag gefällt mir, ist jedoch die ganze relevante Problematik nur das mit dem Aus-Versehen-Ändern? Weil in der Klasse werde ich wohl nicht viel mehr als 8 Variabeln haben, deshalb sollte auch die Übersicht nicht gross in Gefahr sein...</p>
<p>Aber ja, ich weiss eben auch nicht... Mit GetX() und SetX(...) fahre ich wahrscheinlich nicht schlecht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280247</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 07 May 2007 12:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse: protected, public usw. on Mon, 07 May 2007 12:13:43 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Bei meinem Projekt hab ich eine Spriteklasse, die mehrere public-Funktionen und 2 protected Variablen hat. Jetzt ist es ziemlich mühsam, wenn man z.B. die Position des Sprites herausfinden will, muss man immer Sprite-&gt;GetRect()-&gt;x; eingeben (die GetRect-Funktion gibt ein &amp;SDL_Rect zurück, indem die x-Koordinate gespeichert ist). Wäre es nicht einfacher, einfach Sprite-&gt;x zu schreiben und dafür öffentliche Variabeln zu erstellen? Mit Klassen hab ich eben noch nicht sehr viel Erfahrung. Ich weiss zwar, dass es zu Problemen kommen kann, wenn die Variabeln öffentlich zugänglich sind, doch wieso ist das eigentlich so? Weil sie aus Versehen geändert werden könnten? Ich denke, der Typ, von dem ich das habe, weiss schon Bescheid... Deshalb wollte ich euch fragen, wie ihr es handhabt mit Klassenfunktionen...</p>
<p>Ich freue mich auf eure Antworten...</p>
</blockquote>
<p>Die eigendliche Antwort ist, daß bei einem guten Programmdesign überhaupt keine Notwendigkeit bestehen sollte überhaupt auf die Variablen der Klasse zuzugreifen. Der Gedanke der Kapselung ist ja eben, alle relevanten Daten und Funktionen die die Klasse benötigt in selbiger zu vereinen. Sobald die Notwendigkeit besteht &quot;von Aussen&quot; auf Variablen einer Klasse zuzugreifen ist das zumindest ein Hinweis auf unsauberes Design.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280251</guid><dc:creator><![CDATA[okal]]></dc:creator><pubDate>Mon, 07 May 2007 12:13:43 GMT</pubDate></item></channel></rss>