<?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[Klassen und Instanzen]]></title><description><![CDATA[<p>Moin,</p>
<p>da ich neu in c++ bin sorry falls es eher doof ist X-D.<br />
Ich versuche eine Klasse zu instanzieren, allerdings scheint es immer nur eine Instanz dieser Klasse zu geben. Die Klasse:</p>
<pre><code>class Zahler
{
protected:

public:
	Zahler();
	Zahler(int ukap, int up);
	~Zahler();
	bool darf();
	void aktuaktwert();
	void init(int ukap, int up);
	void add();

private:
	int kap;
	int aktrwert;
	int aktzeit;

};
</code></pre>
<p>Das Anlegen der Instanzen sieht dann folgender maßen aus:</p>
<pre><code>Zahler gesamt(6144,833);
Zahler in1(2048,833);
Zahler in2(2048,833);
Zahler in3(2048,833);
Zahler in4(2048,833);
Zahler in5(2048,833);
</code></pre>
<p>Leider ist gesamt die gleiche Instanz wie in1 oder in2. Ich hab keine Ahnung wieso.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265872/klassen-und-instanzen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 18:27:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265872.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Apr 2010 09:23:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:23:29 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>da ich neu in c++ bin sorry falls es eher doof ist X-D.<br />
Ich versuche eine Klasse zu instanzieren, allerdings scheint es immer nur eine Instanz dieser Klasse zu geben. Die Klasse:</p>
<pre><code>class Zahler
{
protected:

public:
	Zahler();
	Zahler(int ukap, int up);
	~Zahler();
	bool darf();
	void aktuaktwert();
	void init(int ukap, int up);
	void add();

private:
	int kap;
	int aktrwert;
	int aktzeit;

};
</code></pre>
<p>Das Anlegen der Instanzen sieht dann folgender maßen aus:</p>
<pre><code>Zahler gesamt(6144,833);
Zahler in1(2048,833);
Zahler in2(2048,833);
Zahler in3(2048,833);
Zahler in4(2048,833);
Zahler in5(2048,833);
</code></pre>
<p>Leider ist gesamt die gleiche Instanz wie in1 oder in2. Ich hab keine Ahnung wieso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890328</guid><dc:creator><![CDATA[Der_Ernst]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:25:46 GMT]]></title><description><![CDATA[<p>Wie kommst du auf die Idee das die gleich wären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890329</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:29:47 GMT]]></title><description><![CDATA[<p>das würd ich auch gern wissen. was verstehst du unter gleich? ja, sie sind alle instanzen der selben klasse. worauf willst du hinaus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890330</guid><dc:creator><![CDATA[Langi]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:32:42 GMT]]></title><description><![CDATA[<p>die Funktion add()</p>
<pre><code>void Zahler::add()
{
	akt = akt + 50;
}
</code></pre>
<p>und die Funktion darf()</p>
<pre><code>bool Zahler::darf()
{
	bool ret = false;
	aktuaktwert();
	EV &lt;&lt; &quot;Der wert des Zähles wird gepürft er ist&quot; &lt;&lt; akt &lt;&lt; &quot;\n&quot;;
	if ((akt + 50) &lt; kap)
	{
		//akt = akt + 50; // annahme alle Pakete sind 50 kByte groß!
		ret = true;
	}
	return ret;
}
</code></pre>
<p>Ich rufe auf</p>
<pre><code>if(gesamt.darf()&amp; in2.darf())
		{
			gesamt.add();
			in2.add();
</code></pre>
<p>Dies geschieht mehrmals hintereinander jeweils für ein anderes inx .</p>
<p>Die Ausgabe von darf() zeigt mir dann immer an:</p>
<p>Der wert des Zähles wird gepürft er ist300<br />
Der wert des Zähles wird gepürft er ist300</p>
<p>das dürfte aber nicht sein. Sondern der Wert vom zweiten müsste niedriger sein. In diesem Fall eigentlich gleich 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890332</guid><dc:creator><![CDATA[Der_Ernst]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:43:56 GMT]]></title><description><![CDATA[<p>Bist du dir denn sicher, dass die zweite Ausgabe auch zu der zweiten Instanz gehört? Das zweite darf wird nämlich gar nicht ausgeführt, falls das erste schon false sein sollte.</p>
<p>Gib doch mal ein vollständiges compilierbares Beispiel für dein Problem. Im Moment ist alles nur geraten, da du zu wenige Informationen gibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890339</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:48:05 GMT]]></title><description><![CDATA[<p>Was ist denn 'akt'? Ein Member jedenfalls nicht...<br />
Also was globales?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890341</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 09:56:27 GMT]]></title><description><![CDATA[<p>Ja bin mir relativ sicher das es eigentlich die 2te Instanz sein sollte. Das kompilierbare Beispiel wird schwierig da es sich um ein Omnet++ Projekt handelt.</p>
<p>Zum Programm ablauf zuerst wird das Gateway initalisiert, danach wird für jede msg die ankommt die Funktion handleMessage(cMessage *msg) aufgerufen.</p>
<pre><code>#include &lt;string.h&gt;
#include &lt;omnetpp.h&gt;
#include &lt;Zahler.h&gt;
#include &lt;message_m.h&gt;

using namespace std;

class Gateway : public cSimpleModule
{
private:
	int counter;
protected:
	virtual void initialize();
	virtual void handleMessage(cMessage *msg);
};

Define_Module(Gateway);

Zahler gesamt(6144,833);
Zahler in1(2048,833);
Zahler in2(2048,833);
Zahler in3(2048,833);
Zahler in4(2048,833);
Zahler in5(2048,833);

void Gateway::initialize()
{
	EV &lt;&lt; &quot;Init&quot;;
}

void Gateway::handleMessage(cMessage *msg)
{
	int src, dest;
	EV &lt;&lt; &quot;Received message '&quot; &lt;&lt; msg-&gt;getName() &lt;&lt;&quot;\n&quot;;
	Paket *ttmsg = check_and_cast&lt;Paket *&gt;(msg);

	src = ttmsg-&gt;getSource();
	dest = ttmsg-&gt;getDest();
	EV &lt;&lt; &quot;Soruce:  '&quot; &lt;&lt; src &lt;&lt;&quot;\n&quot;;
	EV &lt;&lt; &quot;Dest:  '&quot; &lt;&lt; dest &lt;&lt;&quot;\n&quot;;

	Paket *ruckmsg = new Paket(&quot;ruckmeldung&quot;);

	switch(src)
	{
	case 1 :
		if(gesamt.darf()&amp; in1.darf())
		{
			gesamt.add();
			in1.add();
			send(msg, &quot;outz&quot;);
			EV &lt;&lt; &quot;Nachricht abgeschickt an Ziel von in1&quot;;
		}
		else
		{
			EV &lt;&lt; &quot;Nachricht an Ziel von in1 wurde verworfen&quot;;
		}
		send(ruckmsg, &quot;out1&quot;);
		break;

	case 2 :
		if(gesamt.darf()&amp; in2.darf())
		{
			gesamt.add();
			in2.add();
			send(msg, &quot;outz&quot;);
			EV &lt;&lt; &quot;Nachricht abgeschickt an Ziel von in2&quot;;
		}
		else
		{
			EV &lt;&lt; &quot;Nachricht an Ziel von in2 wurde verworfen&quot;;
		}
		send(ruckmsg, &quot;out2&quot;);
		break;

	case 3 :
		if(gesamt.darf()&amp; in3.darf())
		{
			gesamt.add();
			in3.add();
			send(msg, &quot;outz&quot;);
			EV &lt;&lt; &quot;Nachricht abgeschickt an Ziel von in3&quot;;
		}
		else
		{
			EV &lt;&lt; &quot;Nachricht an Ziel von in3 wurde verworfen&quot;;
		}
		send(ruckmsg, &quot;out3&quot;);
		break;

	case 4 :
		if(gesamt.darf()&amp; in4.darf())
		{
			gesamt.add();
			in4.add();
			send(msg, &quot;outz&quot;);
			EV &lt;&lt; &quot;Nachricht abgeschickt an Ziel von in4&quot;;
		}
		else
		{
			EV &lt;&lt; &quot;Nachricht an Ziel von in4 wurde verworfen&quot;;
		}
		send(ruckmsg, &quot;out4&quot;);
		break;

	case 5 :
		if(gesamt.darf()&amp; in5.darf())
		{
			gesamt.add();
			in5.add();
			send(msg, &quot;outz&quot;);
			EV &lt;&lt; &quot;Nachricht abgeschickt an Ziel von in5&quot;;
		}
		else
		{
			EV &lt;&lt; &quot;Nachricht an Ziel von in5 wurde verworfen&quot;;
		}
		send(ruckmsg, &quot;out5&quot;);
		break;
	}
}
</code></pre>
<pre><code>#include &lt;string.h&gt;
#include &lt;Zahler.h&gt;
#include &lt;omnetpp.h&gt;

int kap;
int p;
float akt;
int64 letzte;
int d;

Zahler::Zahler()
{

}
Zahler::Zahler(int ukap,int up )
{
	kap = ukap;

	if ((up &gt; 0) &amp;&amp; (up &lt; 1001))
	{
		p = up;
	}
	else
	{
		p = 1;
		EV &lt;&lt; &quot;p hat die falschen grenzen!!! p wurde auf 1 gesetzt!&quot;;
	}
	letzte = SimTime::getScale();
	d= 10; // Anzahl der Dekrementierungen pro Sekunde, !!!!muss immer 1000 ganz zahlig teilen!!!!!!!!
	akt = 0;
}
Zahler::~Zahler()
{
}
void Zahler::init(int ukap, int up)
{
	kap = ukap;

	if ((up &gt; 0) &amp;&amp; (up &lt; 1001))
	{
		p = up;
	}
	else
	{
		p = 1;
		EV &lt;&lt; &quot;p hat die falschen grenzen!!! p wurde auf 1 gesetzt!&quot;;
	}
	letzte = SimTime::getScale();
	d= 10; // Anzahl der Dekrementierungen pro Sekunde, !!!!muss immer 1000 ganz zahlig teilen!!!!!!!!
	akt = 0;
}

void Zahler::aktuaktwert()
{
	int64 jetzt;
	int64 diff;

	jetzt = SimTime::getScale();

	diff = jetzt - letzte;

	while (diff &gt; (1000/d))
		{
			akt = akt - p * kap / 1000 / d;
			EV &lt;&lt; &quot;der Zähler wurde reduziert&quot; &lt;&lt; akt &lt;&lt; &quot;\n&quot;;

			if (akt &lt; 0)
			{
				akt = 0;
				while (diff &gt; (1000/d)) // akt 0 kann schleife beschleunigen
				{
					diff = diff - (1000/d);
				}
			}

			diff = diff - (1000/d);
		}

	letzte = jetzt-diff; // in diff ist jetzt die anzahl der ms die nicht in das zeitintervall gepasst haben
}

bool Zahler::darf()
{
	bool ret = false;
	aktuaktwert();
	EV &lt;&lt; &quot;Der wert des Zähles wird gepürft er ist&quot; &lt;&lt; akt &lt;&lt; &quot;\n&quot;;
	if ((akt + 50) &lt; kap)
	{
		//akt = akt + 50; // annahme alle Pakete sind 50 kByte groß!
		ret = true;
	}
	return ret;
}

void Zahler::add()
{
	akt = akt + 50;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1890345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890345</guid><dc:creator><![CDATA[Der_Ernst]]></dc:creator><pubDate>Fri, 30 Apr 2010 09:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 10:08:07 GMT]]></title><description><![CDATA[<p>Ok, mir ist gerade aufgefallen das die Zahler.h nicht ganz ok war. Dazu hab ich aber jetzt noch mal ne Frage. Wie bekomme ich ein int64 in einen Header?</p>
<p>Danke euch <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/1890349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890349</guid><dc:creator><![CDATA[Der_Ernst]]></dc:creator><pubDate>Fri, 30 Apr 2010 10:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 12:35:56 GMT]]></title><description><![CDATA[<p>Wie vermutet ist 'akt' also global.</p>
<blockquote>
<p>Der wert des Zähles wird gepürft er ist300<br />
Der wert des Zähles wird gepürft er ist300</p>
<p>das dürfte aber nicht sein. Sondern der Wert vom zweiten müsste niedriger sein. In diesem Fall eigentlich gleich 0.</p>
</blockquote>
<p>Nein, da 'akt' halt kein Member, sondern eine globale Variable ist und daher unabhängig von den einzelnen Zahler-Instanzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890409</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 30 Apr 2010 12:35:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 13:59:55 GMT]]></title><description><![CDATA[<p>Der_Ernst schrieb:</p>
<blockquote>
<p>Wie bekomme ich ein int64 in einen Header?</p>
</blockquote>
<p>Indem du den Header einbindest, der definiert was ein int64 überhaupt ist. Ein Standard-Datentyp ist das nämlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890455</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 30 Apr 2010 13:59:55 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 14:19:03 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>solangsam begreife ich auch c++, zumindest welche variable was macht und wo definiert ist. Es ist schon sehr verwirrend aber irgendwie auch recht nützlich.</p>
<p>Bezüglich dem int64 konnte ich über</p>
<p>#include &lt;inttypes.h&gt;</p>
<p>ihn dann auch im header einbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890462</guid><dc:creator><![CDATA[Der_Ernst]]></dc:creator><pubDate>Fri, 30 Apr 2010 14:19:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und Instanzen on Fri, 30 Apr 2010 16:55:05 GMT]]></title><description><![CDATA[<p>Der_Ernst schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(gesamt.darf()&amp; in1.darf())
</code></pre>
</blockquote>
<p>Der logische Und-Operator in C++ ist &amp;&amp;, nicht &amp;. Zum Beispiel hat &amp;&amp; Shortcut-Semantik, wertet also den zweiten Operanden nur aus, falls der erste <code>true</code> ist.</p>
<p>Der_Ernst schrieb:</p>
<blockquote>
<p>Bezüglich dem int64 konnte ich über<br />
#include &lt;inttypes.h&gt;<br />
ihn dann auch im header einbinden.</p>
</blockquote>
<p>Das ist aber kein C++-Header (im Sinne von Standard-C++, auf das man spätestens im Bezug auf Portabilität achten sollte).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1890530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1890530</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Apr 2010 16:55:05 GMT</pubDate></item></channel></rss>