<?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[Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen);]]></title><description><![CDATA[<p>Hallo!</p>
<p>Eine rein theoretische Frage für euch:<br />
Nehmen wir an ich habe eine Klasse und möchte ihr ein bestimmtes Verhalten beibringen, dann ist es etwas aufwändig für jede &quot;eigenschaft&quot; eine Funktion zu vergeben. ( setDuschen(true); ). Mir ist daher dieses | bei der verarbeitung von Dateien (ios::in) und in einigen GUI Toolkits aufgefallen, bei denen man festlegen kann ob zB ein Listeneintrag verschiebbar/löschbar etc. ist. Ich habe noch keien Programmieransatz -&gt; keinen Code <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="😕"
    /> ... Wie kann man dieses | verwenden und wie nennt sich dies und was ist es? (zB const int duschen; im namespace flag?)</p>
<p>Bitte klärt mich auf!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179460/flags-klassen_obj-gt-setflags-flag-schlafen-flag-duschen-flag-essen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 07:27:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179460.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Apr 2007 08:26:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 08:26:51 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Eine rein theoretische Frage für euch:<br />
Nehmen wir an ich habe eine Klasse und möchte ihr ein bestimmtes Verhalten beibringen, dann ist es etwas aufwändig für jede &quot;eigenschaft&quot; eine Funktion zu vergeben. ( setDuschen(true); ). Mir ist daher dieses | bei der verarbeitung von Dateien (ios::in) und in einigen GUI Toolkits aufgefallen, bei denen man festlegen kann ob zB ein Listeneintrag verschiebbar/löschbar etc. ist. Ich habe noch keien Programmieransatz -&gt; keinen Code <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="😕"
    /> ... Wie kann man dieses | verwenden und wie nennt sich dies und was ist es? (zB const int duschen; im namespace flag?)</p>
<p>Bitte klärt mich auf!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270926</guid><dc:creator><![CDATA[KERNEL PANIC]]></dc:creator><pubDate>Sun, 22 Apr 2007 08:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 08:47:06 GMT]]></title><description><![CDATA[<p>das ist der &quot;or&quot; operator. damit kannst du bits verknuepfen.<br />
0010|0001=0011</p>
<p>das klappt dann mit enums auch und du kannst mit einem &amp; (und) operator diese werte abfragen</p>
<p>0011&amp;0010=0010</p>
<p>und so die einzelnen bits/flags herausfinden</p>
<p>ein enum kann z.b. sein<br />
enum autoteil<br />
{<br />
tuer = 1,<br />
frontscheibe =2,<br />
motor =4,<br />
reifen =8,<br />
dach = 16<br />
};</p>
<p>und mit<br />
int cabrio = tuer|frontscheibe|motor|reifen;<br />
kombinierst du die flags dann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270933</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Sun, 22 Apr 2007 08:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 13:26:39 GMT]]></title><description><![CDATA[<p>Das funktioniert ja ganz hervorragend! DANKE! <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/1271105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271105</guid><dc:creator><![CDATA[KERNEL PANIC]]></dc:creator><pubDate>Sun, 22 Apr 2007 13:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 14:20:10 GMT]]></title><description><![CDATA[<p>flag::kacken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271137</guid><dc:creator><![CDATA[flag::wichsen]]></dc:creator><pubDate>Sun, 22 Apr 2007 14:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 14:31:44 GMT]]></title><description><![CDATA[<p>Das hört sich theoretisch ja ganz toll an nur was ist das Gegenteil von flag::reifen? Ich möchte nicht jedesmal alle 200 attribute in setFlags() neu aufführen wenn ich nur eins rausnehmen möchte....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271143</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 22 Apr 2007 14:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 15:01:04 GMT]]></title><description><![CDATA[<p>dann kannst du den &quot;DWORD&quot; oder &quot;long&quot; oder &quot;int&quot; oder was auch immer holen, in dem die ganzen flags aneinandergereiht sind, und mit dem ^ XOR operator den unnötigen flag entfernen (oder auch wieder hinzufügen):</p>
<pre><code>//ein flag löschen

01001010 ^
00001000 =
01000010
</code></pre>
<pre><code class="language-cpp">flags= sitzen|essen|lesen;
flags=flags^essen; //nur noch sitzen und lesen, die chips sind nähmlich alle :(
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1271153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271153</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sun, 22 Apr 2007 15:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 16:30:40 GMT]]></title><description><![CDATA[<p>Oft wird auch eine &quot;changeFlags&quot; Funktion verwendet, die 2 Masken mitbekommt, 1x die Bits welche übernommen werden sollen, und 1x die neuen Zustände für diese Bits:</p>
<pre><code class="language-cpp">void foo::changeFlags(unsigned mask, unsigned new_state)
{
    m_flags &amp;= ~mask;
    m_flags |= (new_state &amp; mask);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1271235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271235</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 22 Apr 2007 16:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Sun, 22 Apr 2007 18:41:41 GMT]]></title><description><![CDATA[<p>Danke für die antworten, ich habe auch mal eine version gebastelt, die mir aber etwas ungeschickt erscheint... kann man das so lassen, oder sie die if-abfragen umständlich, zumal hidden und selectable gar nicht gebaucht werden, da später im code nur überprüft wird ob es sichtbar ist bzw. selektierbar...</p>
<pre><code class="language-cpp">enum PointFlags
{
	visible = 1,
	hidden = 2,
	movable = 4,
	not_movable = 8,
	selectable = 16,
	not_selectable = 32
};
</code></pre>
<pre><code class="language-cpp">void glPointD::setFlags(int flags)
{
	this-&gt;flags = flags;
	if(flags &amp; hidden)
	{
		this-&gt;flags = flags ^ visible;
		this-&gt;flags = flags ^ hidden;
	}
	if(flags &amp; not_selectable)
	{
		this-&gt;flags = flags ^ selectable;
		this-&gt;flags = flags ^ not_selectable;
	}	
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1271353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271353</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 22 Apr 2007 18:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Mon, 23 Apr 2007 07:09:28 GMT]]></title><description><![CDATA[<p>Warum hasst du visible und hidden gleichzeitig, genau so wie selectable und not_selectable ? Das macht doch logisch keinen Sinn !<br />
1 information an 2 unterschiedlichen stellen = redundanz = poese !</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271493</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Mon, 23 Apr 2007 07:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Mon, 23 Apr 2007 09:12:41 GMT]]></title><description><![CDATA[<p>Nimm doch std::bitset, da kannst du dann auch die Größe leichter verändern und vor allem mehr als 32 (64) flags haben.<br />
Außerdem gibts hübsche funktionen gratis. DIe bitweisen Verknüpf. operatoren sind in der Klasse überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271573</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 23 Apr 2007 09:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Mon, 23 Apr 2007 12:49:10 GMT]]></title><description><![CDATA[<p>Oh, ein ganz klassische Fall für das State-Pattern <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>
<pre><code class="language-cpp">enum PointFlags
{
    visible = 1,
    hidden = 2,
    movable = 4,
    not_movable = 8,
    selectable = 16,
    not_selectable = 32
};
</code></pre>
<p>Wird zu</p>
<pre><code class="language-cpp">struct glPointD_visibility
{
    virtual void do_with_visibility() = 0;
};

struct glPointD_movability
{
    virtual void do_with_movability() = 0;
}:

//...

struct visible_glPointD : glPointD_visibility
{
    void do_with_visibility()
    {
        do_something();
    }
};

struct hidden_glPointD : glPointD_visibility
{
    void do_with_visibility()
    {
        //do nothing
    }
}

class glPointD
{
    glPointD_visibility* visiblity;
}
</code></pre>
<p>Es wird immer die jeweilige virtuelle Methode aufgerufen und diese tut entsprechend was anderes (oder auch nichts). Nun können andere Methoden natürlich den Status ändern etc.<br />
Siehe auch:<br />
<a href="http://home.earthlink.net/~huston2/dp/state.html" rel="nofollow">http://home.earthlink.net/~huston2/dp/state.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271734</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Mon, 23 Apr 2007 12:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Flags? klassen_obj-&amp;gt;setFlags(flag::schlafen | flag::duschen | flag::essen); on Tue, 24 Apr 2007 01:12:04 GMT]]></title><description><![CDATA[<p>Oh, ein klassischer Fall von Overkill.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272103</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 01:12:04 GMT</pubDate></item></channel></rss>