<?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[OOP - Wert ändert ... aber auch nicht]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich habe heute meine erste Klasse geschrieben! Leider funktioniert sie nicht richtig.</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;conio.h&gt;

using namespace std;

class Krieger {
	private:
		char Name [20];
		long int Leben, Staerke;
	public:
		char * init(char *, long int, long int);
		void angreifen (Krieger);
		void Verletzung (long int);
		long int leben (void);
		char * gib_name (void);
		bool lebendig (void);
};

int main (void) {
	Krieger K1, K2;
	K1.init(&quot;Krieger 1&quot;, 10, 3);
	K2.init(&quot;Krieger 2&quot;, 10, 4);
	while (K1.lebendig() &amp;&amp; K2.lebendig()) {
		K1.angreifen(K2);
		K2.angreifen(K1);
		cout &lt;&lt; K1.gib_name() &lt;&lt; &quot;: &quot; &lt;&lt; K1.leben() &lt;&lt; endl;
		cout &lt;&lt; K2.gib_name() &lt;&lt; &quot;: &quot; &lt;&lt; K2.leben() &lt;&lt; endl;
		getch();
	}
	getch();
	return 0;
}

char * Krieger::init (char * str, long int Leb, long int St) {
	Leben = Leb;
	Staerke = St;
	return strncpy(Name, str, sizeof(Name));
}

void Krieger::angreifen(Krieger K) {
	K.Verletzung(Staerke);
}

void Krieger::Verletzung (long int St) {
	Leben -= St;
}

long int Krieger::leben (void) {
	return Leben;
}

char * Krieger::gib_name(void) {
	return Name;
}

bool Krieger::lebendig (void) {
	return (Leben &gt; 0);
}
</code></pre>
<p><strong>Edit: geändert dumme Fehler</strong><br />
Irgendwie ändert der Wert von Leben nicht in der Funktion Krieger::<strong>Verletzung</strong>(). Seht am besten selbst.</p>
<p>Mfg MisterVista</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238513/oop-wert-ändert-aber-auch-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:49:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238513.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Apr 2009 15:27:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:43:30 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich habe heute meine erste Klasse geschrieben! Leider funktioniert sie nicht richtig.</p>
<p>Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;conio.h&gt;

using namespace std;

class Krieger {
	private:
		char Name [20];
		long int Leben, Staerke;
	public:
		char * init(char *, long int, long int);
		void angreifen (Krieger);
		void Verletzung (long int);
		long int leben (void);
		char * gib_name (void);
		bool lebendig (void);
};

int main (void) {
	Krieger K1, K2;
	K1.init(&quot;Krieger 1&quot;, 10, 3);
	K2.init(&quot;Krieger 2&quot;, 10, 4);
	while (K1.lebendig() &amp;&amp; K2.lebendig()) {
		K1.angreifen(K2);
		K2.angreifen(K1);
		cout &lt;&lt; K1.gib_name() &lt;&lt; &quot;: &quot; &lt;&lt; K1.leben() &lt;&lt; endl;
		cout &lt;&lt; K2.gib_name() &lt;&lt; &quot;: &quot; &lt;&lt; K2.leben() &lt;&lt; endl;
		getch();
	}
	getch();
	return 0;
}

char * Krieger::init (char * str, long int Leb, long int St) {
	Leben = Leb;
	Staerke = St;
	return strncpy(Name, str, sizeof(Name));
}

void Krieger::angreifen(Krieger K) {
	K.Verletzung(Staerke);
}

void Krieger::Verletzung (long int St) {
	Leben -= St;
}

long int Krieger::leben (void) {
	return Leben;
}

char * Krieger::gib_name(void) {
	return Name;
}

bool Krieger::lebendig (void) {
	return (Leben &gt; 0);
}
</code></pre>
<p><strong>Edit: geändert dumme Fehler</strong><br />
Irgendwie ändert der Wert von Leben nicht in der Funktion Krieger::<strong>Verletzung</strong>(). Seht am besten selbst.</p>
<p>Mfg MisterVista</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694491</guid><dc:creator><![CDATA[MisterVista]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:30:26 GMT]]></title><description><![CDATA[<p>MisterVista schrieb:</p>
<blockquote>
<p>Irgendwie ändert der Wert von Leben nicht in der Funktion Krieger::wunde(). Seht am besten selbst.</p>
</blockquote>
<p>das wundert mich nicht. weils die funktion nicht gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694493</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:30:26 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:31:48 GMT]]></title><description><![CDATA[<p>Zum einen, was du da machst ist absolut reudig. Du mixt C und C++.<br />
Zum zweiten, mit der Funktion &quot;Krieger::wunde()&quot; meinst du sicherlich &quot;Krieger::Verletzung&quot; ? oder? Naja wie soll sich der Wert ändern, wenn du die Funktionen nirgends in der Main aufrufst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694494</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:44:09 GMT]]></title><description><![CDATA[<p>Tschuldigung *schämen* Trotzdem Fehler bleibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694498</guid><dc:creator><![CDATA[MisterVista]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:57:07 GMT]]></title><description><![CDATA[<p>Das Objekt wird kopiert. Übergib es bei &quot;angreifen()&quot; einfach als Referenz</p>
<pre><code class="language-cpp">void Krieger::angreifen(Krieger&amp; K);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1694504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694504</guid><dc:creator><![CDATA[issen1]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 15:58:24 GMT]]></title><description><![CDATA[<p>Logisch bleibt dein Fehler du hast ja auch nichts am Code geändert <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="😃"
    /> Oder doch?Wenn ja, dann zeig es uns mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694505</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 11 Apr 2009 15:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 16:06:27 GMT]]></title><description><![CDATA[<p>Zeile 25 und 26</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694511</guid><dc:creator><![CDATA[MisterVista]]></dc:creator><pubDate>Sat, 11 Apr 2009 16:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sat, 11 Apr 2009 18:17:18 GMT]]></title><description><![CDATA[<p>Ganz einfach, der Post von issen1 erklärt warum diese Verhalten auftritt, ändere es und du wirst sehen es wird funktionieren.<br />
Und weiterhin versuch dich an eine Sprache zu halten solche C/C++ Mixe werden hier nicht gerne gesehen.Weil du dich aktuell im C++-Forum befindest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694562</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 11 Apr 2009 18:17:18 GMT</pubDate></item><item><title><![CDATA[Reply to OOP - Wert ändert ... aber auch nicht on Sun, 12 Apr 2009 16:07:45 GMT]]></title><description><![CDATA[<p>naja - da sich niemand anders erbarmt, dir zu sagen, was alles hässlich ist, versuch ich das mal:</p>
<pre><code class="language-cpp">/*Krieger.h*/
//include-guards:
#ifndef KRIEGER_H_INCLUDED
#define KRIEGER_H_INCLUDED

#include &lt;string&gt; //std::string

class Krieger
{
    public:
        typedef unsigned long int Tleben;
        typedef unsigned long int Tstaerke; //ein paar typedefs können nicht schaden...
        typedef Tstaerke Tdamage;
    private: 
        std::string Name; //ist komfortabler, sicherer und auch schneller, als du es mit char* schaffst :P
        Tleben Leben; //variablen-deklarationen sollten immer in eine extra zeile
        Tstaerke Staerke;
    public: 
        Krieger (const std::string&amp; name, Tleben leben, Tstaerke staerke);

        const std::string&amp; GetName() const {return Name;}
        void SetName(const std::string &amp;val) {Name = val;}

        TLeben GetLeben() const {return Leben;}
        bool IsAlive () const {return static_cast &lt;bool&gt; (Leben);} //0 -&gt; tot, rest ist lebendig

        Tdamage GetDamage() const {return Staerke;}

        void TakeDamage(const Tdamage&amp; dmg);

/*brauchen wir nicht (mehr), wir haben einen konstruktor:
char * init(char *, long int, long int);
*/
}; 

namespace fight /*könnte man ggf. noch in einen anderen header verlagern*/
{
  void attack (Krieger&amp; lhs, const Krieger&amp; rhs);
}

#endif //#ifndef KRIEGER_H_INCLUDED
</code></pre>
<pre><code class="language-cpp">/*Krieger.cpp*/
#include &quot;Krieger.h&quot;

Krieger::Krieger(const std::string&amp; name, Krieger::Tleben leben, Krieger::Tstaerke staerke)
 : Name(name), Staerke(staerke), Leben(leben)
{}

void Krieger::TakeDamage(const Krieger::Tdamage&amp; dmg)
{
  if(Leben &lt; dmg)
  {
    Leben = 0;
  }
  else
  {
    Leben -= dmg;
  }
}

void fight::attack(Krieger&amp; lhs, const Krieger&amp; rhs)
{
  lhs.TakeDamage ( rhs.GetDamage() );
}
</code></pre>
<pre><code class="language-cpp">/*main.cpp*/

#include &lt;iostream&gt; 
#include &lt;cstdlib&gt;

#include &quot;Krieger.h&quot; 

#include &lt;conio.h&gt; 

int main () //void schreibt man in C++ nicht mehr in die Parameter-Liste
{
    Krieger K1 (&quot;Krieger 1&quot;, 10, 3);
    Krieger K2 (&quot;Krieger 1&quot;, 10, 4);

    while (K1.IsAlive() &amp;&amp; K2.IsAlive())
    {
        fight::attack (K1, K2);
        fight::attack (K2, K1);

        std::cout &lt;&lt; K1.GetName() &lt;&lt; &quot;: &quot; &lt;&lt; K1.GetLeben() &lt;&lt; std::endl; 
        std::cout &lt;&lt; K2.Getname() &lt;&lt; &quot;: &quot; &lt;&lt; K2.GetLeben() &lt;&lt; std::endl; 
    }
    getch();
    return EXIT_SUCCESS;
}
</code></pre>
<p>ich hoffe, es hilft dir ein wenig, du änderst es und vor allem: du verstehst es ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694886</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 12 Apr 2009 16:07:45 GMT</pubDate></item></channel></rss>