<?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[Klassendesign für Mathe]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin derzeit am grübeln, wie ich Methoden meiner Klasse schön strukturiere, daher wollte ich mir ein paar Meinungen einholen.</p>
<p>Als Beispiel nehme ich mal eine Matrix-Klasse, wo ich derzeit zwischen 4 Varianten am entscheiden bin.</p>
<p>Variante 1:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Diese Matrix zu einer Translationsmatrix wandeln.
    void translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 2:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Diese Matrix zu einer Translationsmatrix wandeln und 
    // referenz auf sich selbst wiedergeben.
    matrix&amp; translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 3:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Neue Translationsmatrix berechnen und wiedergeben.
    static matrix translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 4: Gefällt mir nicht so sehr, da ich &quot;globale Funktionen&quot; habe.</p>
<pre><code class="language-cpp">class matrix
{
// [...]
};

// Neue Translationsmatrix berechnen und wiedergeben.
matrix translate (float x, float y, float z);
</code></pre>
<p>Ich würde mehr zur Variante 1 und 2 tendieren, jedoch frage ich eher mal die Profis was die davon halten, da diese ja sicherlich auch schon mal vor so einem Problem standen und sich damit besser auskennen als ich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Danke euch vielmals für eure Hilfe!</p>
<p>Liebe Grüße,<br />
C++'ler</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219965/klassendesign-für-mathe</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 16:15:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219965.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Aug 2008 09:34:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 09:34:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin derzeit am grübeln, wie ich Methoden meiner Klasse schön strukturiere, daher wollte ich mir ein paar Meinungen einholen.</p>
<p>Als Beispiel nehme ich mal eine Matrix-Klasse, wo ich derzeit zwischen 4 Varianten am entscheiden bin.</p>
<p>Variante 1:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Diese Matrix zu einer Translationsmatrix wandeln.
    void translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 2:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Diese Matrix zu einer Translationsmatrix wandeln und 
    // referenz auf sich selbst wiedergeben.
    matrix&amp; translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 3:</p>
<pre><code class="language-cpp">class matrix
{
// [...]

    // Neue Translationsmatrix berechnen und wiedergeben.
    static matrix translate (float x, float y, float z);

// [...]
};
</code></pre>
<p>Variante 4: Gefällt mir nicht so sehr, da ich &quot;globale Funktionen&quot; habe.</p>
<pre><code class="language-cpp">class matrix
{
// [...]
};

// Neue Translationsmatrix berechnen und wiedergeben.
matrix translate (float x, float y, float z);
</code></pre>
<p>Ich würde mehr zur Variante 1 und 2 tendieren, jedoch frage ich eher mal die Profis was die davon halten, da diese ja sicherlich auch schon mal vor so einem Problem standen und sich damit besser auskennen als ich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Danke euch vielmals für eure Hilfe!</p>
<p>Liebe Grüße,<br />
C++'ler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562133</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sun, 10 Aug 2008 09:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 09:37:11 GMT]]></title><description><![CDATA[<p>ich wuerd sagen, entscheide zw. den varianten 1, 2, 3 so, wie es dir am besten passt, sprich wie du es am besten gebrauchen kannst, wenn du mit der klasse arbeitest.</p>
<p>mfg,<br />
julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562136</guid><dc:creator><![CDATA[Julian__]]></dc:creator><pubDate>Sun, 10 Aug 2008 09:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 09:45:08 GMT]]></title><description><![CDATA[<p>Tja, das ist das Problem, ich weiß eben nicht gerade wie man es am besten braucht, da ich noch nicht die großartige Erfahrung gesammelt habe wie andere hier. <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="🙂"
    /> Darum frag ich ja auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562140</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sun, 10 Aug 2008 09:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 09:53:10 GMT]]></title><description><![CDATA[<p>Also es kommt drauf an, was du machen willst. 1 und 2 spielen eigentlich keine Rolle, ausser du willst sowas machen:</p>
<pre><code class="language-cpp">matrix m;
m.translate (2,2,2).translate (5,5,5);
</code></pre>
<p>(Das wird häufig für Operatoren gemacht, damit man die auch Verknüpfen kann)</p>
<p>Und da translate für mich eine Veränderung einer Matrix suggeriert, machen 3 und 4 nicht wirklich Sinn.</p>
<p>Also ich würde hier mal die Variante 2 nehmen, dann noch die Operatoren +, += usw. richtig implementieren und dann ist sowas ganz einfach möglich:</p>
<pre><code class="language-cpp">matrix m;
matrix b;

matrix c = (m+b.translate (2,2,2)).translate (5,5,5);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1562142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562142</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 10 Aug 2008 09:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 10:19:37 GMT]]></title><description><![CDATA[<p>Translate sollte auf der Matrix selbst arbeiten, da man meist die eigentliche Matrix manipulieren möchte und nicht eine Kopie. Falls man dies doch möchte kann man ja leicht die Kopie selbst anlegen und dann translate() benutzen, oder du benutzt zwei methoden einmal translate und eine welche eine Kopie erzeugt die du translate_ oder so nennst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562153</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Sun, 10 Aug 2008 10:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 10:34:13 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Translate sollte auf der Matrix selbst arbeiten, da man meist die eigentliche Matrix manipulieren möchte und nicht eine Kopie. Falls man dies doch möchte kann man ja leicht die Kopie selbst anlegen und dann translate() benutzen, oder du benutzt zwei methoden einmal translate und eine welche eine Kopie erzeugt die du translate_ oder so nennst</p>
</blockquote>
<p>Das habe ich ja mit meinem obigen Post sagen wollen. Mann kann dann direkt durch den copy-ctor ein neues Objekt initialisieren, indem man einfach die Operationen angibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562165</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 10 Aug 2008 10:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klassendesign für Mathe on Sun, 10 Aug 2008 11:01:03 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig verstanden habe, meinst Du eine Translation in 3D und mit den drei Koordinaten x,y,z ist diese bereits vollständig bestimmt. Es werden also keine keinerlei Koordinaten des 'alten' matrix-Objektes benötigt.</p>
<p>Dieser Umstand spricht gegen eine Methode und für eine (globale) Funktion, die Dir das gewünschte matrix-Objekt erstellt. Nicht mehr und nicht weniger.</p>
<p>Du benötigst auch keine statische Funktion, solange Du nur eine Matrix-Klasse besitzt. Wenn Du es 'weniger global' haben möchtest, so würde ich einen namespace vorschlagen, in dem diese Funktion definiert ist.</p>
<p>Die Schnittstelle, die Du wählst, sollte die Funktion Deiner Domain - in diesem Fall wahrscheinlich das Hantieren mit Transformationsmatizen - sichtbar machen. D.h. die Ausdrücke im Code sollten so aussehen, wie die Ausdrücke, die Du auch als mathematischen Ausdruck hinschreiben kannst.</p>
<p>Transformationsmatrizen werden auch nicht addiert sondern multipliziert. Es bietet sich daher an, für die <a href="http://lufgi9.informatik.rwth-aachen.de/projekte/schule_hochschule/transformationen.htm" rel="nofollow">Verknüpfung zweier Transformationsmatizen</a> die Multiplikation zu implementieren.</p>
<p>Auch würde ich die <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-154875-and-start-is-20.html" rel="nofollow">drei Koordinaten in einem Vektor</a> zusammenfassen.</p>
<p>Im Code sähe es dann z.B. so aus:</p>
<pre><code class="language-cpp">Vector v = ..;
    matrix m = make_translation( v );
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562170</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 10 Aug 2008 11:01:03 GMT</pubDate></item></channel></rss>