<?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]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe ein problem:</p>
<p>ich will eine opengl-anwendung schreiben (NEIN! nicht verschieben.), und habe dafür eine fensterklasse</p>
<pre><code class="language-cpp">class window
</code></pre>
<p>, die mir die ganze x-initialisierung abnimmt, und die eingehenden signale (tastatur, maus etc.) in einer noch nicht definierten form weiterleiten kann. (wird u.u. auch mal für winapi mit derselben schnittstelle geschrieben. nur am rande.)</p>
<p>jetzt kommt die klasse dazu, die die eigentliche arbeit macht. also, user-eingaben verarbeiten, interne logik verwalten, auf den bildschirm zeichnen. nennen wir sie der einfachheit halber</p>
<pre><code class="language-cpp">class g
</code></pre>
<p>jetzt die frage: wie soll das ganze aussehen: soll &quot;g&quot; einen member &quot;window&quot; haben, weil ja das fenster quasi zur anwendung gehört? dann müsste die eventschleife innerhalb von g sein. außerdem: wie soll dan das zeichnen vonstatten gehen? wenn ich das irgendwie so löse:</p>
<pre><code class="language-cpp">g::draw()
{
    gl_blablazeichnen(...);
    m_window.flush_drawn_stuff_to_screen(); 
}
</code></pre>
<p>dann, sieht das irgendwie blöd aus. weil das zeichnen an sich ja gar nicht zur logik gehört, sondern zu &quot;window&quot;, aber irgendwie auch nicht.<br />
oder soll g ein member von window sein, weil ja die anwendung _im_ fenster ist? dann würde die sache mit dem zeichnen schön der hierarchie folgen (&quot;fenster sagt der anwendung: zeichne jetzt!&quot;) das ist aber anderweitig recht unintuitiv, da die anwendung ja &quot;über&quot; dem darstellenden fenster stehen sollte.</p>
<p>eine weitere lösung - und zwar mit callbacks - habe ich mal ausgeschlossen, weil die nicht wirklich anders als die zweite ist, nur umständlicher.</p>
<p>wer weiß rat?</p>
<p>&lt;edit&gt;&lt;b&gt;-Tags entfernt!&lt;/edit&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141737/klassendesign</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 14:51:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141737.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Mar 2006 14:51:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to klassendesign on Sat, 25 Mar 2006 10:43:14 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe ein problem:</p>
<p>ich will eine opengl-anwendung schreiben (NEIN! nicht verschieben.), und habe dafür eine fensterklasse</p>
<pre><code class="language-cpp">class window
</code></pre>
<p>, die mir die ganze x-initialisierung abnimmt, und die eingehenden signale (tastatur, maus etc.) in einer noch nicht definierten form weiterleiten kann. (wird u.u. auch mal für winapi mit derselben schnittstelle geschrieben. nur am rande.)</p>
<p>jetzt kommt die klasse dazu, die die eigentliche arbeit macht. also, user-eingaben verarbeiten, interne logik verwalten, auf den bildschirm zeichnen. nennen wir sie der einfachheit halber</p>
<pre><code class="language-cpp">class g
</code></pre>
<p>jetzt die frage: wie soll das ganze aussehen: soll &quot;g&quot; einen member &quot;window&quot; haben, weil ja das fenster quasi zur anwendung gehört? dann müsste die eventschleife innerhalb von g sein. außerdem: wie soll dan das zeichnen vonstatten gehen? wenn ich das irgendwie so löse:</p>
<pre><code class="language-cpp">g::draw()
{
    gl_blablazeichnen(...);
    m_window.flush_drawn_stuff_to_screen(); 
}
</code></pre>
<p>dann, sieht das irgendwie blöd aus. weil das zeichnen an sich ja gar nicht zur logik gehört, sondern zu &quot;window&quot;, aber irgendwie auch nicht.<br />
oder soll g ein member von window sein, weil ja die anwendung _im_ fenster ist? dann würde die sache mit dem zeichnen schön der hierarchie folgen (&quot;fenster sagt der anwendung: zeichne jetzt!&quot;) das ist aber anderweitig recht unintuitiv, da die anwendung ja &quot;über&quot; dem darstellenden fenster stehen sollte.</p>
<p>eine weitere lösung - und zwar mit callbacks - habe ich mal ausgeschlossen, weil die nicht wirklich anders als die zweite ist, nur umständlicher.</p>
<p>wer weiß rat?</p>
<p>&lt;edit&gt;&lt;b&gt;-Tags entfernt!&lt;/edit&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023173</guid><dc:creator><![CDATA[gadfabelasr]]></dc:creator><pubDate>Sat, 25 Mar 2006 10:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to klassendesign on Fri, 24 Mar 2006 16:07:16 GMT]]></title><description><![CDATA[<p>hallo<br />
hmm was es auch werden mag, ich versuchs mal:</p>
<p>würde die klassen trennen und nicht die eine als member der anderen instanzieren. die eigentliche applikation als controller über alles setzen. weiter eine kernel-klasse definieren für die logik. vom window/gui aus nachrichten an die app senden, die lässt dann die kernel rechnen. die berechenten sachen als rohdaten (x/y-pos etc..) oder als objekte zurücksenden.<br />
das window kann dann auf befehl die ganzen sachen darstellen.<br />
dazu musst Du die entsprechenden funktionen wie g.send_message() und window_flush_drawn_stuff_to_screen()<br />
entweder public <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> oder<br />
die controller klasse als friend <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> definieren.</p>
<p>hoffe das ist irgendwie logisch und sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023230</guid><dc:creator><![CDATA[logik-err]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to klassendesign on Sun, 26 Mar 2006 11:53:14 GMT]]></title><description><![CDATA[<p><strong>ok, danke, ich werd mir dann mal was überlegen <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="🙂"
    /></strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1024088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1024088</guid><dc:creator><![CDATA[gadfabelasr]]></dc:creator><pubDate>Sun, 26 Mar 2006 11:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to klassendesign on Sun, 26 Mar 2006 12:22:30 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wenn jetzt schon feststeht dass Teile der Implementierung später mal durch andere ersetzt werden sollen(z.B. für die geplante Windowsportierung) dann schau dir mal das hier an: <a href="http://www.mitp.de/imperia/md/content/vmi/1347/4.pdf" rel="nofollow">http://www.mitp.de/imperia/md/content/vmi/1347/4.pdf</a></p>
<p>MfG Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1024104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1024104</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Sun, 26 Mar 2006 12:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to klassendesign on Tue, 28 Mar 2006 15:37:01 GMT]]></title><description><![CDATA[<p>aaah, danke, das ist wirklich interessant. aber ich glaube, das ist für meine bedürfnisse schon etwas zu.. abstrakt. ich will ja schließlich keine bibliothek programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1025669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1025669</guid><dc:creator><![CDATA[gadfabelasr]]></dc:creator><pubDate>Tue, 28 Mar 2006 15:37:01 GMT</pubDate></item></channel></rss>