<?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[Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Obwohl die Lösung sicher denkbar einfach ist, fällt mir für ein einfaches Zeichenprogramm keine elegante objektorientierte Programmstruktur in C++ ein.</p>
<p>Als Beispiel seien folgende Klassen gegeben:</p>
<p>Klasse &quot;Malwerkzeugkasten&quot; (umfangreich!)<br />
Klasse &quot;Kreis&quot;<br />
Klasse &quot;Dreieck&quot;<br />
Klasse &quot;Rechteck&quot;<br />
...</p>
<p>Das Problem besteht darin, daß der &quot;Malwerkzeugkasten&quot; viele Farben, Pinsel etc. enthält und deshlab von ihm zur Laufzeit nur 1 Instanz erzeugt werden soll!</p>
<p>Die Klassen &quot;Kreis&quot;, &quot;Dreieck&quot; und &quot;Rechteck&quot; sollen einfachen Zugriff auf den &quot;Malwerkzeugkasten haben und sich ihn teilen. Da der &quot;Malwerkzeugkasten&quot; sehr umfangreich ist, möchte ich verhindern, daß jede Klasse &quot;Kreis&quot;, &quot;Dreieck&quot; etc. einen eigenen Malkasten besitzt.</p>
<p>Wie wird das am elegantesten objektorientiert in C++ programmiert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313875/objektorientierte-klassenstruktur-für-zeichenprogramm-änfängerproblem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 20:57:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313875.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Feb 2013 19:20:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 19:35:36 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Obwohl die Lösung sicher denkbar einfach ist, fällt mir für ein einfaches Zeichenprogramm keine elegante objektorientierte Programmstruktur in C++ ein.</p>
<p>Als Beispiel seien folgende Klassen gegeben:</p>
<p>Klasse &quot;Malwerkzeugkasten&quot; (umfangreich!)<br />
Klasse &quot;Kreis&quot;<br />
Klasse &quot;Dreieck&quot;<br />
Klasse &quot;Rechteck&quot;<br />
...</p>
<p>Das Problem besteht darin, daß der &quot;Malwerkzeugkasten&quot; viele Farben, Pinsel etc. enthält und deshlab von ihm zur Laufzeit nur 1 Instanz erzeugt werden soll!</p>
<p>Die Klassen &quot;Kreis&quot;, &quot;Dreieck&quot; und &quot;Rechteck&quot; sollen einfachen Zugriff auf den &quot;Malwerkzeugkasten haben und sich ihn teilen. Da der &quot;Malwerkzeugkasten&quot; sehr umfangreich ist, möchte ich verhindern, daß jede Klasse &quot;Kreis&quot;, &quot;Dreieck&quot; etc. einen eigenen Malkasten besitzt.</p>
<p>Wie wird das am elegantesten objektorientiert in C++ programmiert? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298381</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 19:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 19:33:52 GMT]]></title><description><![CDATA[<p>Wozu braucht denn ein Kreis Zugriff auf einen Malwerkzeugkasten? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Oder meinst du ein Kreismalwerkzeug? Wieder: Wozu muss das Werkzeug vom Werkzeugkasten wissen?</p>
<p>Dies ist kein C++-Problem, eher wirkt das Design an sich nicht gut durchdacht. In naivster Ausführung würde ich das so gestalten, das im Malwerkzeugkasten die Malwerkzeuge (Kreismalwerkzeug, Rechteckmalwerkzeug, usw.) sind, mit denen man dann wiederum die konkreten grafischen Figuren (also Kreise, Rechtecke, usw.) erzeugen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298384</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 12 Feb 2013 19:33:52 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:17:16 GMT]]></title><description><![CDATA[<p>Hallo SeppJ!</p>
<p>Danke für die Anwort. Die Klassen habe ich nur als Beispiel für ein grundsätzliches Problem beschreiben:</p>
<p>class CFarbe<br />
{<br />
public:<br />
int Rot;<br />
int Blau;<br />
...<br />
};</p>
<p>class CPinsel<br />
{<br />
public:<br />
void Zeichne();<br />
int Dicke;<br />
};</p>
<p>void CPinsel::Zeichne()<br />
{<br />
Wie auf Farbe zugreifen???<br />
}</p>
<p>class CMalwerkzeug<br />
{<br />
public:<br />
CFarbe Farben;<br />
CPinsel Pinsel;<br />
}</p>
<p>Wie kann ich in der Funktion &quot;Pinsel::Zeichne&quot; auf &quot;Farben&quot; zugreifen?</p>
<p>Habe da wirklich eine Denkblockade.</p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298388</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 19:53:57 GMT]]></title><description><![CDATA[<p>Das ist ja auch wieder komisch modelliert. Eine Farbe ist doch kein Werkzeug und die Pinselform ist eine Eigenschaft eines Werkzeugs, kein eigenes Werkzeug. So kennt man das ja auch von den &quot;richtigen&quot; Grafikprogrammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298389</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 12 Feb 2013 19:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:03:04 GMT]]></title><description><![CDATA[<p>Habe meine Beispielklasse noch einmal geändert. Wie gesagt ist das nur ein Beispiel für eine grundsätzliche Frage: Wie wird hier in einer Funktion von &quot;Kreis&quot; auf &quot;Pinsel1&quot; zugegriffen?</p>
<p>Mein Verständnisproblem liegt glaube ich darin, daß ich nicht weiß, wie eine Klasse auf Datenelemente anderer Klassen zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298390</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:03:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:09:34 GMT]]></title><description><![CDATA[<p>dein design scheint mir nicht gerade so gut gewählt zu sein, ich hab gerade mal<br />
ein simples grundgerüst zusammengeschustert wie ich in einem einfachen projekt verwenden würde, kannste ja mal drübergucken <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>
<pre><code>class CToolbox{
    typedef unsigned char color;
public:
    bool getColor(CColor&amp; p_dest, color r, color g, color b, unsigned float a = 1.0f){
		p_dest = CColor(r,g,b,a);
		return true;
	}
	bool getPinsel(CPinsel&amp; p_dest, unsigned float p_size = 1.0f){
		p_dest = CPinsel(p_size);
	}
public:
	struct CColor{
		color r, g, b; 
		unsigned float a;

		CColor(color p_r = 0, color p_g = 0, color p_b = 0, unsigned float a = 1.0f){
		   r = p_r;
		   g = p_g;
		   b = p_b;
		   a = p_a;
		}
	};

	class CPinsel{
	    unsigned float size;
		CPinsel(){
		  size = 1.0f;
		}
		CPinsel(unsigned float p_size){
			size = p_size;
		}
	};
public:
	class CCircleTool{
		/*static*/ bool draw(const CColor&amp; p_color, const CPinsel&amp; p_pinsel, size_t p_radius){
			/*draw the circle*/
		}
	};
	class CQuadTool{
		/*static*/ bool draw(const CColor&amp; p_color, const CPinsel&amp; p_pinsel, size_t p_radius){
			/*draw the quad*/
		}
	};
	class CTriangleTool{
		/*static*/ bool draw(const CColor&amp; p_color, const CPinsel&amp; p_pinsel, size_t p_size){
			/*draw the triangle*/
		}
	};
};// c: CToolbox

int main(){
	CToolbox k;
	CToolbox::CColor c;
	CToolbox::CPinsel p;

	k.getColor(c,100,10,2,1.0f);
	k.getPinsel(p,3.75f);

	CToolbox::CCircleTool ct;
	ct.draw(c,p,50);

	CToolbox::CQuadTool qt;
	qt.draw(c,p,75);

	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2298391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298391</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:22:36 GMT]]></title><description><![CDATA[<p>Nicht böse gemeint, aber diese Präfixe stören absolut den Lesefluss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298394</guid><dc:creator><![CDATA[Zagatho_zero87]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:22:48 GMT]]></title><description><![CDATA[<p>Hallo gamer804,</p>
<p>oh wow, danke für den Beispielcode!</p>
<p>Das muss ich mir erst einmal in Ruhe anschauen und geistig aufnehmen - bin wie gesagt noch Anfänger.</p>
<p>Danke und Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298395</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:22:48 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:27:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Hallo gamer804,</p>
<p>oh wow, danke für den Beispielcode!</p>
<p>Das muss ich mir erst einmal in Ruhe anschauen und geistig aufnehmen - bin wie gesagt noch Anfänger.</p>
<p>Danke und Grüße,<br />
Bernd</p>
</blockquote>
<p>bitte, ist einfach eben schnell runtergetippt und nicht getestet, aber ich denke es ist leicht verständlich, wenn nicht, frag. <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="🙂"
    /><br />
Ist nicht die beste lösung aber eine der einfachsten würde ich sagen, musste mal gucken ob das jetzt genau auf dein projekt passt, weil naja, hast ja nicht so viele infos gesagt.</p>
<blockquote>
<p>Nicht böse gemeint, aber diese Präfixe stören absolut den Lesefluss</p>
</blockquote>
<p><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="😃"
    /> Sorry, ich hab übrigens mich von euch überzeugen lassen und hab aus meinem gesamten aktuellen projekt die prefixe komplett entfernt <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="😉"
    /><br />
ich dachte aber dieses mal mache ich es noch einmal, weil es dann einfacher zu verstehen (wenn auch nicht zu lesen) ist <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/2298397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298397</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:41:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29726">@mireiner</a>: Vergiss gamer8o4s Code am besten schnell wieder. Da drin sind so viel schlechter C++-Stil und Fehler, das schadet mehr als es nützt.</p>
<p>Nimm das bitte nicht persönlich, gamer8o4, aber auch abgesehen von den Präfixen ist der Code ein schlechtes Beispiel.</p>
<p>Zum Beispiel könntest du die Konstruktor-Initialisierungsliste verwenden. Und ein <code>color</code> -Typedef für eine Farbkomponente (nicht Farbe) ist fragwürdig. Ebenso, wieso du einmal <code>float</code> und einmal <code>unsigned char</code> verwendest, und ebenso die Defaultparameter (bis auf den letzten). Der Konstruktor sähe besser so aus:</p>
<pre><code>Color(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255)
: r(r)
, g(g)
, b(b)
, a(a)
{
}
</code></pre>
<p>Im Weiteren ist nicht klar, wozu <code>getColor()</code> einen <code>bool</code> zurückgibt und eine Referenz als Parameter nimmt. Den Typen <code>unsigned float</code> gibts erst gar nicht. Alles <code>public</code> zu machen ist auch fragwürdig. Das <code>/*static*/</code> verwirrt nur.</p>
<p>Nicht böse gemeint, aber mir scheint, du solltest auch noch ein wenig Grundlagen anschauen <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298400</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:54:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Nimm das bitte nicht persönlich, gamer8o4, aber auch abgesehen von den Präfixen ist der Code ein schlechtes Beispiel.</p>
</blockquote>
<p>Nein nein, ich bin selber noch ein halber anfänger <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="😃"
    /><br />
Aber hab trotzdem nochmal ein paar fragen zu deinen anmerkungen....</p>
<pre><code>du die Konstruktor-Initialisierungsliste verwenden
</code></pre>
<p>so wie es ist kann man aber ganz einfach die getColor() funktion umschreiben um z.b. alle farben im farbkasten dunkler zu machen. das kann man nicht im konstruktor machen , weil man sonst die CColor objekte nicht mehr so gut zwischen verschiedenen farbkästen hin-und-her reichen könnte.</p>
<blockquote>
<p>Und ein color-Typedef für eine Farbkomponente (nicht Farbe) ist fragwürdig.</p>
</blockquote>
<p>okay, das ist echt dämlich <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>
<blockquote>
<p>Ebenso, wieso du einmal float und einmal unsigned char verwendest</p>
</blockquote>
<p>ich hab mir angewöhnt die sichtbarkeit als float zu speichern, weil sie dann genauer angeben kann und nicht mit werten zwischen 0 und 255 rumhantieren muss.</p>
<blockquote>
<p>und ebenso die Defaultparameter (bis auf den letzten).</p>
</blockquote>
<p>was gibt es an standartwerten auszusetzen? die hab nur genommen, damit ich keinen standartkonstruktor schreiben muss, der eine standartfarbe setzt.</p>
<blockquote>
<p>wozu getColor() einen bool zurückgibt</p>
</blockquote>
<p>sorry, hab ich vergessen zu ändern, die funktion sah erst anders aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<blockquote>
<p>zurückgibt und eine Referenz als Parameter nimmt</p>
</blockquote>
<p>warum soll man erst ein neues object von CColor erstellen, wenn man auch einfach ein vorhandenes nehmen kann? anders sehe der code so aus und das ist ineffizienter:</p>
<pre><code>CColor c = getColor(100,10,75,1.0f);
</code></pre>
<blockquote>
<p>Alles public zu machen ist auch fragwürdig.</p>
</blockquote>
<p>was willst du denn da private machen?</p>
<blockquote>
<p>Nicht böse gemeint, aber mir scheint, du solltest auch noch ein wenig Grundlagen anschauen</p>
</blockquote>
<p>bin immernoch halb dabei, auch wenn ich seit 2,5 jahren c++ programmiere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /><br />
aber wie ich immer sage, mit 16 hab ich noch genug zeit das zu lernen <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298405</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:54:06 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:50:47 GMT]]></title><description><![CDATA[<p>Ich würde hier auch sicher keine verschachtelten Klassen verwenden.</p>
<p>Im Grunde stell ich mir die Struktur in etwa so vor. Du hast deine Grafikobjekte, die von einer Basisklasse erben, z.B. DrawingItem mit den Ableitungen DrawingItemRect, DrawingItemCircle usw. Die haben Eigenschaften wie Koordinaten, Farbe usw. Dann gibt es entsprechende Factories, das sind die Tools, die man in der Toolbox auswählen kann. z.B. ein RectDrawingTool oder wie auch immer. Die Toolbox kann sie instanziieren und verwalten. Die brauchen widerum aber keinen Zugriff auf die Toolbox. Hier bin ich mir jetzt nicht sicher, weil ich nicht alle Anforderungen kenne und das ganze entsprechend nicht durchdacht ist. Aber die brauchen Zugriff auf die aktuellen Einstellungen. Ich würde es als Objekt unabhängig von der Toolbox modellieren. Vielleicht eine Klasse DrawingSettings, die auch Einstellugnen wie Farbe, Pinseldicke usw. hat. Die Tools bekommen eine Instanz übergeben. Die Toolbox verwaltet diese Instanz und kann die Eigenschaft ändern. Wenn du das Tool das nächste mal zum Zeichnen verwendest, hat es automatisch die aktuellen Einstellungen, die über die Toolbox gesetzt wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298406</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 20:57:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Im Grunde stell ich mir die Struktur in etwa so vor. Du hast deine Grafikobjekte, die von einer Basisklasse erben, z.B. DrawingItem mit den Ableitungen DrawingItemRect, DrawingItemCircle usw. Die haben Eigenschaften wie Koordinaten, Farbe usw. Dann gibt es entsprechende Factories, das sind die Tools, die man in der Toolbox auswählen kann. z.B. ein RectDrawingTool oder wie auch immer. Die Toolbox kann sie instanziieren und verwalten. Die brauchen widerum aber keinen Zugriff auf die Toolbox. Hier bin ich mir jetzt nicht sicher, weil ich nicht alle Anforderungen kenne und das ganze entsprechend nicht durchdacht ist. Aber die brauchen Zugriff auf die aktuellen Einstellungen. Ich würde es als Objekt unabhängig von der Toolbox modellieren. Vielleicht eine Klasse DrawingSettings, die auch Einstellugnen wie Farbe, Pinseldicke usw. hat. Die Tools bekommen eine Instanz übergeben. Die Toolbox verwaltet diese Instanz und kann die Eigenschaft ändern. Wenn du das Tool das nächste mal zum Zeichnen verwendest, hat es automatisch die aktuellen Einstellungen, die über die Toolbox gesetzt wurden.</p>
</blockquote>
<p>das ist schlau <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="🤡"
    /> aber ich glaube das wird an dieser stelle etwas kompliziert dann für den anfang oder?</p>
<blockquote>
<p>für ein einfaches Zeichenprogramm</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2298412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298412</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 20:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:09:04 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich versuchte mein Problem anhand eines ganz simplen Beispiels zu erklären, was aber vermutlich mißlungen ist.</p>
<p>Konkret arbeite ich an einem MFC-Windowsprogramm mit GDI+ Grafik, das eine lange Reihe von Grafikresourcen bereitstellen muss:</p>
<p>Sehr verkürzte Darstellung! :</p>
<p>Pen *pen1;<br />
Pen *pen2;<br />
Pen *pen3;<br />
Pen *pen4;</p>
<p>SolidBrush *solidBrushSchwarz;<br />
SolidBrush *solidBrushWeiss;<br />
SolidBrush *solidBrushGrau;<br />
SolidBrush *solidBrushHellgrau;</p>
<p>Gdiplus::Font *fontSymbol;<br />
Gdiplus::Font *fontSymbolText;<br />
usw...</p>
<p>Weil es sich um eine sehr lange Liste von Grafikresourcen handelt, möchte ich von ihnen zur Laufzeit nur 1 Instanz erzeugen.</p>
<p>An anderer Stelle im Programm habe ich dann viele Funktionen, die auf die obengenannten GDI+ Resourcen Zugriff haben müssen und zwar in der Regel auf fast alle gleichzeitig.</p>
<p>Wie wird der einfache Zugriff einer solchen Sammlung von Grafikresourcen nun am elegantesten in so ein Programm implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298415</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:11:12 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie wird der einfache Zugriff von Grafikresourcen nun am elegantesten in so ein Programm implementiert?</p>
</blockquote>
<p>schreib dir einen kleinen GrafikManager der einen vector mit den grafikresourcen verwaltet (mit verwalten ist hier folgendes gemeint: zugriff ermöglichen, laden und löschen verwalten)</p>
<blockquote>
<p>Konkret arbeite ich an einem MFC-Windowsprogramm mit GDI+ Grafik</p>
</blockquote>
<p>dachte du bist anfänger? also ernstgemeinter tipp, wenn du wirklich noch ein anfänger bist, dann lass die finger von der MFC, da wäre nämlich ein wissen über generelle application designs insbesondere dem Doc-View-Design echt mehr als sinnvoll.. (hab selber böse erfahrungen gemacht, ich bin nämlich mit spieleprogrammierung eingestiegen ^^)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298416</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:09:30 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Wie wird der einfache Zugriff von Grafikresourcen nun am elegantesten in so ein Programm implementiert?</p>
</blockquote>
<p>Jede Zeichenfunktion OnDraw eines Dialogs darf den Zeichenklasten kennen. Pro Dialog ein Zeiger auf den Zeichenkasten ist wohl ok. Und die aufgerufenen Funktioinen bekommen den Zeiger auf den Zeichenkasten halt mit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298418</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:20:16 GMT]]></title><description><![CDATA[<p>Hallo volkard,</p>
<p>ah, mit einem Zeiger! Das ist glaube ich die Lösung auf die ich nicht gekommen bin.</p>
<p>Damit werde ich es erst einmal versuchen.</p>
<p>Danke und Grüße auch an alle anderen für ihre Ratschläge!<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298425</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:30:02 GMT]]></title><description><![CDATA[<p>gamer8o4 schrieb:</p>
<blockquote>
<p>so wie es ist kann man aber ganz einfach die getColor() funktion umschreiben um z.b. alle farben im farbkasten dunkler zu machen. das kann man nicht im konstruktor machen , weil man sonst die CColor objekte nicht mehr so gut zwischen verschiedenen farbkästen hin-und-her reichen könnte.</p>
</blockquote>
<p>Was hat das mit der Konstruktor-Initialisierungsliste zu tun?</p>
<p>Die <code>getColor()</code> -Funktion ist komplett überflüssig, da man statt <code>getColor(c, r, g, b, a)</code> immer auch <code>c = Color(r, g, b, a)</code> schreiben kann, was auch weniger verwirrend ist (&quot;get&quot; wird für anderes eingesetzt)...</p>
<p>gamer8o4 schrieb:</p>
<blockquote>
<p>ich hab mir angewöhnt die sichtbarkeit als float zu speichern, weil sie dann genauer angeben kann und nicht mit werten zwischen 0 und 255 rumhantieren muss.</p>
</blockquote>
<p>Und für RGB gilt das nicht? Davon abgesehen wird die Grafikschnittstelle wahrscheinlich eh nur 256 verschiedene Alpha-Werte akzeptieren...</p>
<p>gamer8o4 schrieb:</p>
<blockquote>
<p>was gibt es an standartwerten auszusetzen? die hab nur genommen, damit ich keinen standartkonstruktor schreiben muss, der eine standartfarbe setzt.</p>
</blockquote>
<p>Dass man den Konstruktor mit 1 oder 2 Argumenten aufrufen kann, was nicht sinnvoll ist.</p>
<pre><code>Color c(35, 100); // welche Komponenten sind nun gesetzt?!
Color c = 200; // wtf!? auch möglich, da nicht explicit
</code></pre>
<p>gamer8o4 schrieb:</p>
<blockquote>
<p>warum soll man erst ein neues object von CColor erstellen, wenn man auch einfach ein vorhandenes nehmen kann? anders sehe der code so aus und das ist ineffizienter:</p>
</blockquote>
<p>Es spielt genau gar keine Rolle, ob du das ganze Objekt oder dessen Member einzeln zuweist. Abgesehen davon sollte der Code zuerst einen vernünftigen Stil befolgen, bevor du an solche Mikrooptimierungen überhaupt denkst. Selbst wenn du hier 2 Nanosekunden herausholen solltest (was du nicht tust), wäre das komplett irrelevant, weil du andernorts viel mehr verbrätst. Was du hingegen nicht berücksichtigst, ist die Referenz und deren Dereferenzierung, was ohne Optimierung auch nicht gratis ist.</p>
<p>Fazit: Code erst schön schreiben. Nur schnell, wenn nötig.</p>
<p>gamer8o4 schrieb:</p>
<blockquote>
<p>was willst du denn da private machen?</p>
</blockquote>
<p>Ich würde gar keine Klasse machen, die nur andere enthält. Allenfalls ein Namensraum, aber hier kommt man gut ohne aus.</p>
<p>gamer8o4 schrieb:</p>
<blockquote>
<p>aber wie ich immer sage, mit 16 hab ich noch genug zeit das zu lernen <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="🙂"
    /></p>
</blockquote>
<p>Schau dir vielleicht auch ein gutes Buch wie den C++ Primer (nicht Primer Plus) an. Nur durch Programmieren lernt man -- gerade in C++ -- vieles nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298427</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:30:02 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:47:22 GMT]]></title><description><![CDATA[<p>Mir ist gerade noch eine Idee gekommen, weiß aber nicht, ob sie möglich ist?</p>
<p>Eine Basisklasse mit einem Element &quot;Baukasten&quot;, von dem zur Laufzeit nur 1 Instanz erzeugt wird und alle von dieser Basisklasse abgeleiteten Klassen können auf einfachem Wege auf diesen EINEN Baukasten der Basisklasse zugreifen.</p>
<p>Gibt es in C++ Sprachelemente die so etwas möglich machen?</p>
<p>Funktioniert das womöglich, wenn das Element &quot;Baukasten&quot; in der Basisklasse als statisch deklariert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298431</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:51:57 GMT]]></title><description><![CDATA[<p>Ja, <code>static</code> ermöglicht sowas. Führst du das weiter, kommst du zum Singleton-Pattern. <a href="http://www.c-plusplus.net/forum/p2298033#2298033" rel="nofollow">Hier</a> gabs gerade ne Diskussion darüber, warum das üblicherweise verpönt ist <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/2298437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298437</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:51:14 GMT]]></title><description><![CDATA[<p>gamer8o4 schrieb:</p>
<blockquote>
<blockquote>
<p>zurückgibt und eine Referenz als Parameter nimmt</p>
</blockquote>
<p>warum soll man erst ein neues object von CColor erstellen, wenn man auch einfach ein vorhandenes nehmen kann? anders sehe der code so aus und das ist ineffizienter:</p>
<pre><code>CColor c = getColor(100,10,75,1.0f);
</code></pre>
</blockquote>
<p>Oh aha. Also gibt es in deiner Welt kein inlining und RVO? Hast du gebnchmarkt? compilierst du mit simpelsten optimierungen? Machen das coole Kids heute so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298438</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:51:14 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:54:50 GMT]]></title><description><![CDATA[<p>mireiner schrieb:</p>
<blockquote>
<p>Eine Basisklasse mit einem Element &quot;Baukasten&quot;, von dem zur Laufzeit nur 1 Instanz erzeugt wird und alle von dieser Basisklasse abgeleiteten Klassen können auf einfachem Wege auf diesen EINEN Baukasten der Basisklasse zugreifen.</p>
<p>Gibt es in C++ Sprachelemente die so etwas möglich machen?</p>
<p>Funktioniert das womöglich, wenn das Element &quot;Baukasten&quot; in der Basisklasse als statisch deklariert wird?</p>
</blockquote>
<p>klingt nach globalen variablen (sehr schlechter stil) oder Singletons (wurde mir heute gesagt, dass man die auch nicht zu oft verwenden sollte) <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="😃"
    /><br />
mit static würde theoretisch auch funktionieren, aber naja, das könnte man in diesem fall als schlechte singleton implementierung oder auch als komische globale variable bezeichnen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298440</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:55:13 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>gamer8o4 schrieb:</p>
<blockquote>
<blockquote>
<p>zurückgibt und eine Referenz als Parameter nimmt</p>
</blockquote>
<p>warum soll man erst ein neues object von CColor erstellen, wenn man auch einfach ein vorhandenes nehmen kann? anders sehe der code so aus und das ist ineffizienter:</p>
<pre><code>CColor c = getColor(100,10,75,1.0f);
</code></pre>
</blockquote>
<p>Oh aha. Also gibt es in deiner Welt kein inlining und RVO? Hast du gebnchmarkt? compilierst du mit simpelsten optimierungen? Machen das coole Kids heute so?</p>
</blockquote>
<p>okay ich gebe auf <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/2298443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298443</guid><dc:creator><![CDATA[gamer8o4]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 21:57:23 GMT]]></title><description><![CDATA[<p>[quote=&quot;mireiner&quot;]Mir ist gerade noch eine Idee gekommen, weiß aber nicht, ob sie möglich ist?</p>
<blockquote>
<p>Es ist möglich.</p>
<p>[quote=&quot;mireiner&quot;]Eine Basisklasse mit einem Element &quot;Baukasten&quot;, von dem zur Laufzeit nur 1 Instanz erzeugt wird und alle von dieser Basisklasse abgeleiteten Klassen können auf einfachem Wege auf diesen EINEN Baukasten der Basisklasse zugreifen.</p>
</blockquote>
<p>ALso eine globakle Variable Baukasten.</p>
<p>mireiner schrieb:</p>
<blockquote>
<p>Gibt es in C++ Sprachelemente die so etwas möglich machen?</p>
</blockquote>
<p>Ja, tausende.<br />
Am einfachsten, Du machst eine globale Variable, wenn Du eine meinst.</p>
<p>mireiner schrieb:</p>
<blockquote>
<p>Funktioniert das womöglich, wenn das Element &quot;Baukasten&quot; in der Basisklasse als statisch deklariert wird?</p>
</blockquote>
<p>Klar. Aber warum dafür Vererbung anstrengen? Vererbung ist doch der echt nichtnaheliegende Weg, eine globale Variable zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298446</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 12 Feb 2013 21:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 22:00:08 GMT]]></title><description><![CDATA[<p>Hallo Nexus!</p>
<p>War nur so eine Idee von mir. Wenn das wirklich möglich ist, hört sich das in meinen Ohren erst mal als die ultimative Lösung für mein Problem an.</p>
<p>Das werde ich dann gleich einmal anhand eines einfachen Praxisbeispiels ausprobieren. Danke auch für den Hinweis auf den Singeton Pattern Thread, davon habe entfernt schon einmal etwas gehört.</p>
<p>Grüße,<br />
Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298448</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 22:00:08 GMT</pubDate></item><item><title><![CDATA[Reply to Objektorientierte Klassenstruktur für Zeichenprogramm - Änfängerproblem on Tue, 12 Feb 2013 22:13:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a></p>
<blockquote>
<p>Klar. Aber warum dafür Vererbung anstrengen? Vererbung ist doch der echt nichtnaheliegende Weg, eine globale Variable zu deklarieren.</p>
</blockquote>
<p>Mmh, ich dachte ein statisches Element einer Basisklasse wäre vielleicht besser gekapselt als ein globales Objekt. Da es sich ja um sehr viele (statische) Grafikresource-Elemente handelt, wäre der Zugriff, für die von dieser Basisklasse abgeleiteten Klassen, auch denkbar einfach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2298456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2298456</guid><dc:creator><![CDATA[mireiner]]></dc:creator><pubDate>Tue, 12 Feb 2013 22:13:27 GMT</pubDate></item></channel></rss>