<?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[Wieso bruach hier meine Klasse ein Zuweisungsoperator?]]></title><description><![CDATA[<p>Die Klasse Modulsharing enthält Gruppierungen. Ein Gruppenelement &quot;SModulPriority&quot; enthält ein Zeiger auf das Objekt der gruppe und die Priorität nach der Sortiert werden soll. :</p>
<pre><code class="language-cpp">class CModulSharing{

	//Struktur definiert Gruppenelement , Modulreferenz + Priorität entsprechend des
	//Gruppen Name
	struct SModulPriority{

		const CProcess *m_pProcess;
		const UINT m_iPriority;

		//Default Konstruktor
		SModulPriority(const CProcess* pP,const UINT iP=0) : m_pProcess(pP),
															m_iPriority(iP){
		}
		//Sortierkriterum
		bool operator&lt; (const SModulPriority &amp;scr) const {
			return (m_iPriority &lt; scr.m_iPriority) ? true : false;
		}

	};

	//Groupierungen
	std::map&lt;std::string,std::set&lt;SModulPriority&gt; &gt; m_Grouping;

public:

	void addToGroup(const CProcess &amp;Obj,std::string strGroup,const UINT iPriority=0){

		m_Grouping[strGroup].insert(SModulPriority(&amp;Obj,iPriority));

	}
};
</code></pre>
<p>Allerding mekkert der Compiler das CPocess ein =operator braucht, aber ich mach doch hier nirgens eine zuweisung mit einem CPorcess Objekt?????</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193317/wieso-bruach-hier-meine-klasse-ein-zuweisungsoperator</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 00:33:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193317.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Sep 2007 05:22:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:22:17 GMT]]></title><description><![CDATA[<p>Die Klasse Modulsharing enthält Gruppierungen. Ein Gruppenelement &quot;SModulPriority&quot; enthält ein Zeiger auf das Objekt der gruppe und die Priorität nach der Sortiert werden soll. :</p>
<pre><code class="language-cpp">class CModulSharing{

	//Struktur definiert Gruppenelement , Modulreferenz + Priorität entsprechend des
	//Gruppen Name
	struct SModulPriority{

		const CProcess *m_pProcess;
		const UINT m_iPriority;

		//Default Konstruktor
		SModulPriority(const CProcess* pP,const UINT iP=0) : m_pProcess(pP),
															m_iPriority(iP){
		}
		//Sortierkriterum
		bool operator&lt; (const SModulPriority &amp;scr) const {
			return (m_iPriority &lt; scr.m_iPriority) ? true : false;
		}

	};

	//Groupierungen
	std::map&lt;std::string,std::set&lt;SModulPriority&gt; &gt; m_Grouping;

public:

	void addToGroup(const CProcess &amp;Obj,std::string strGroup,const UINT iPriority=0){

		m_Grouping[strGroup].insert(SModulPriority(&amp;Obj,iPriority));

	}
};
</code></pre>
<p>Allerding mekkert der Compiler das CPocess ein =operator braucht, aber ich mach doch hier nirgens eine zuweisung mit einem CPorcess Objekt?????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372062</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:37:19 GMT]]></title><description><![CDATA[<p>Solchen Fehlermeldungen folgt doch normalerweise eine meterlange &quot;instanciated from here&quot; Liste - wenn du der folgst, siehst du auch, wo die Zuweisung benötigt wird.</p>
<p>(und das Problem hier ist, daß der Compiler keinen Default-Operator anlegen kann, weil die Klasse SModulPriority zwei konstante Elemente enthält)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372066</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:42:32 GMT]]></title><description><![CDATA[<p>Jedes Objekt, das Element eines Standardkontainers sein soll, muss kopierbar und zuweisbar sein. Im Übrigen sind nichtstatische konstante Member in Klassen, die keine Aggregate sind, für gewöhnlich logisch fehlerhaft. Die logische Konstanz wird hier bereits durch die die Initialisierung im Konstruktor und das Fehlen eines Interfaces zur Änderung dieser Member vermittelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372067</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:43:25 GMT]]></title><description><![CDATA[<p>Was meinsdu mit Default-Operator? Default-Konsturktor oder?</p>
<p>&quot;instanciated from here&quot; Liste woher bekomm ich di in VS 2003? <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/1372069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372069</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:43:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:50:41 GMT]]></title><description><![CDATA[<p>ERROR: Die logische Konstanz wird hier bereits durch die die Initialisierung im Konstruktor und das Fehlen eines Interfaces zur Änderung dieser Member vermittelt.</p>
<p>Für die klasse CProcess wird doch automatisch ein Zuweisungsoperator erzeugt.. der müsste doch genügen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372071</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 05:53:32 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Was meinsdu mit Default-Operator? Default-Konsturktor oder?</p>
</blockquote>
<p>Damit meine ich die default-angelegten Memberfunktionen, die jeder C++ Compiler im Ernstfall für dich erzeugt (bzw. erzeugen will) - operator=, copy-Ctor und Dtor.</p>
<p>@logische Konstanz: Es gibt keine Methoden, die die Member ändern können (OK, die Tatsache, daß sie public sind, könnte da kontraproduktiv sein) und in der set&lt;&gt; werden sowieso nur const SModulPriority-Objekte untergebracht, also ist es unnötig, die Member noch konstant zu setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372076</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Sep 2007 05:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:03:17 GMT]]></title><description><![CDATA[<p>ok danke....</p>
<p>Aber wieso muss ich den zuweisungoperator selber schreiben, bei der klasse CProcess kann der &quot;automatisch&quot; erzeuge von compiler doch verwendet werden???</p>
<p>Wie sieht der zuweisungoperator eine abgeleiten klasse aus?</p>
<p>Hier die Klassen:</p>
<pre><code class="language-cpp">//#####################################################################################
//
// Class:			CModul
// Name:			Systemmodul als abstrakte Basisklasse (Handler,Processmodul)
// Description:		Basismodul Parameter 
//
//#####################################################################################
class CModul{

protected:

	//Modul ID
	const UINT m_iModulID;

	//Modulname
	const std::string m_strName;

	//Modul bereit/aktiviert!
	BOOL m_boReady;

public:

	//Konstruktor
	CModul(UINT iD=1,std::string strN=&quot;NONAME&quot;) :	m_iModulID(iD), 
													m_strName(strN),
													m_boReady(true){

	}
	////Kopie-Konstruktor

	CModul(const CModul &amp;scr):	m_iModulID(scr.m_iModulID), 
								m_strName(scr.m_strName),
								m_boReady(scr.m_boReady){ 
	//	
	//	
	}

	//CModul&amp; operator=(const CModul &amp; scr){
	//
	//	if(this!= &amp;scr){

	//		this-&gt;m_boReady= scr.m_boReady;
	//		this-&gt;m_iModulID= scr.m_iModulID;
	//		this-&gt;m_strName(scr.m_strName);
	//	}
	//	return *this;
	//}
	//Destruktor
	virtual ~CModul()=0{}

	virtual inline const BOOL &amp;isReady() { return m_boReady; }
	virtual inline const UINT &amp;ID() { return m_iModulID; }

};

//#####################################################################################
//
// Class:			CProcess
// Name:			Processmodul
// Description:		Klasse definiert Processmodulkonfiguration und beinhaltet Modulrezepte
//
//#####################################################################################
class CProcess : public CModul{

public:
	//Modulpriorität gegenüber Alternativmodule
	//int m_iPriority;

	CProcess(UINT iD=-1,std::string strN=&quot;NONAME&quot;/*,UINT iP=0*/): CModul(iD,strN)/*	,	
															m_iPriority(iP)*/{}

	//Sortierkriteriumfunktion std:set
	//bool SortPriority(const CProcess &amp;scr){
	//	
	//	return (m_iPriority &gt; scr.m_iPriority) ? true : false;
	//
	//
	//}

	//bool operator&lt; (const CProcess &amp;scr) const {
	//	return (m_iPriority &lt; scr.m_iPriority) ? true : false;
	//}

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1372082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372082</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:12:38 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>ok danke....</p>
<p>Aber wieso muss ich den zuweisungoperator selber schreiben, bei der klasse CProcess kann der &quot;automatisch&quot; erzeuge von compiler doch verwendet werden???</p>
</blockquote>
<p>Nein, kann er nicht. Der default-generierte Operator kopiert deine Klasse elementweise - und das funktioniert nicht mit Referenzen und konstanten Membern (und mit Klassen, die selber keinen erreichbaren Zuweisungsoperator haben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372088</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:38:49 GMT]]></title><description><![CDATA[<p>hmm.. ok, aber wie kann aich ein zuweisungsoperator schreiben, wenn ich member variaben const sin?</p>
<pre><code class="language-cpp">this-&gt;data= ...;
</code></pre>
<p>geht ja dann nich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372095</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:43:46 GMT]]></title><description><![CDATA[<p>Ja, da stehst du vor dem selben Problem wie der Compiler - du kannst einem konstanten Element nichts zuweisen. Die Lösung ist, entweder einen Dummy-Operator anzulegen, der nichts macht, oder das const bei den Membern wegzulassen.</p>
<p>(theoretisch geht auch noch pl*** - aber das dürfte bereits an der Grenze der Legalität liegen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372100</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:51:16 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>hmm.. ok, aber wie kann aich ein zuweisungsoperator schreiben, wenn ich member variaben const sin?</p>
<pre><code class="language-cpp">this-&gt;data= ...;
</code></pre>
<p>geht ja dann nich</p>
</blockquote>
<p>Warum sind sie denn überhaupt const? Und was soll die Zuweisung bei dieser Klasse logisch darstellen. <em>Das</em> sind die Fragen, die sich mir zuerst stellen. Implementationstechniken sind da erst einmal zweitrangig.</p>
<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>Aber wieso muss ich den zuweisungoperator selber schreiben, bei der klasse CProcess kann der &quot;automatisch&quot; erzeuge von compiler doch verwendet werden???</p>
</blockquote>
<p>Es ist wichtig, die Dinge auseinanderzuhalten. Der Zuweisungsoperator wird immer implizit <em>deklariert</em>, wenn du selbst keinen deklarierst. Implizit <em>definiert</em> wird der implizit deklarierte Zuweisungsoperator erst, wenn er benutzt wird. Ein implizit deklarierter Zuweisungsoperator ist aber möglicherweise nicht (implizit) definierbar, weil entweder Member const sind (und der Zuweisungsoperator des betreffenden Members nicht const ist, was eher ungewöhnlich wäre), oder auf die Zuweisungsoperatoren der Baisklassen oder Member nicht zugegriffen werden kann (sie existieren - d.h. sie wurden (wenigstens implizit) deklariert - ja in jedem Falle). In diesem Falle ist das Programm fehlerhaft - an dem Punkt, an dem der Zuweisungoperator benutzt wird. Es ist aber erst einmal kein Fehler, eine Klasse zu haben, die nicht zugewiesen werden kann.</p>
<p>Der implizit definierte Zuweisungsoperator ist keine magische Blackbox, er tut nichts weiter, als die Zuweisungsoperatoren der Basisklassen und Member aufzurufen - deshalb ist er, nebenbei gesagt, im Allgemeinen auch nicht exceptionsicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372103</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 06:54:36 GMT]]></title><description><![CDATA[<p>also ich habe eine std:list mit CProcess Elemente, deren ID eindeutig sind ,deswegen &quot;const&quot;!</p>
<p>Also zweites will ich die Module in gruppen mit proritäten gruppieren wollen (siehe oben CModulSharing! Aber darin speicher bzw. hantiere ich ja nur die Pointer auf die eindeutigen Objekte, deswegen frag ich ja wieso ich ein zuweisungsoperator brauche?</p>
<pre><code class="language-cpp">class CModulSharing{

	//Struktur definiert Gruppenelement , Modulreferenz + Priorität entsprechend des
	//Gruppen Name
	struct SModulPriority{

		CProcess *m_pProcess;
		UINT m_iPriority;

		//Default Konstruktor
		SModulPriority(CProcess* pP, UINT iP=0) : m_pProcess(pP),
												  m_iPriority(iP){
		}
		//Sortierkriterum
		bool operator&lt; (const SModulPriority &amp;scr) const {
			return (m_iPriority &lt; scr.m_iPriority) ? true : false;
		}

	};

	//Groupierungen
	std::map&lt;std::string,std::set&lt;SModulPriority&gt; &gt; m_Grouping;

public:

	void addToGroup(CProcess &amp;Obj,std::string strGroup,UINT iPriority=0){

		m_Grouping[strGroup].insert(SModulPriority(&amp;Obj,iPriority));

	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1372105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372105</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 25 Sep 2007 06:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 07:03:40 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>also ich habe eine std:list mit CProcess Elemente, deren ID eindeutig sind ,deswegen &quot;const&quot;!</p>
</blockquote>
<p>Besonders eindeutig sind die IDs ja nicht, wenn sie alle mit 1 vordefiniert werden <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 />
In dem Fall würde ich die IDs wohl aus einer statischen Variable heraus initialisieren, um echt eindeutige Werte zu erhalten - und bei der Zuweisung gar nicht anfassen:</p>
<pre><code class="language-cpp">class CProcess
{
  static int next_id
  const int m_id;
  string m_data;
public:
  CProcess(const string&amp; d)
  : m_id(next_id++)
  , m_data(d)
  {}

  CProcess(const CProcess&amp; other)
  : m_id(next_id++)
  , m_data(other.m_data)
  {}

  CProcess&amp; operator=(const CProcess&amp; other)
  {
    m_data=other.m_data;
    return *this;
  }
};

int CProcess::next_id=1;
</code></pre>
<blockquote>
<p>Also zweites will ich die Module in gruppen mit proritäten gruppieren wollen (siehe oben CModulSharing! Aber darin speicher bzw. hantiere ich ja nur die Pointer auf die eindeutigen Objekte, deswegen frag ich ja wieso ich ein zuweisungsoperator brauche?</p>
</blockquote>
<p>Da du mit Zeigern arbeitest, braucht diese Klasse nicht den op= der CProcess-Klasse. Aber das set&lt;&gt; benötigt den op= der SModulPriority - und der hat(te) die gleichen Schwierigkeiten mit den const-Membern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372110</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Sep 2007 07:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso bruach hier meine Klasse ein Zuweisungsoperator? on Tue, 25 Sep 2007 08:14:22 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>also ich habe eine std:list mit CProcess Elemente, deren ID eindeutig sind ,deswegen &quot;const&quot;!...</p>
</blockquote>
<p>&quot;Eindeutigkeit&quot; ist aber nicht das Kriterium für &quot;const&quot;.<br />
&quot;const&quot; ist etwas, wenn es über die gesamte Lebenszeit des Objekts (über diesen Bezeichner) nicht mehr verändert werden soll.<br />
Bzgl. operator=() sehe ich da eigentlich nur 2 Alternativen:</p>
<ul>
<li>Entweder behält das &quot;Zielobjekt&quot; seinen vorherigen Wert (Hinweis auf &quot;const)</li>
<li>oder es übernimmt den des &quot;Quellobjekts&quot; (dann ist er aber nicht const).</li>
</ul>
<p>Die Umsetzung ist dann auch klar: Im Ersten Fall ignoriert der operator=() einfach das entsprechende Member (das kann der &quot;default-Operator&quot; nicht wissen, deswegen muss man es manuell implementieren). Im Zweiten Fall macht man das Member nicht const (und der default-operator=() tut, was man will)...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372148</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 25 Sep 2007 08:14:22 GMT</pubDate></item></channel></rss>