<?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[Probleme mit Klassen]]></title><description><![CDATA[<p>Hallo <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>
<p>Da ich seit diesem Semester nun von C+ auf C++ umgestiegen bin, dort aber noch ab und an Probleme habe, frage ich nun einfach mal hier nach.</p>
<p>Mein 1. Problem: Wir lernen derzeit die Kapselung. Dazu haben wir ein Programm erhalten, indem wir Klassen erstellen sollten und möglichst in Header-Dateien auslagern sollten.<br />
Sofern ich nicht falsch liege, sollte man also extra eine Header-Datei, sowie eine cpp-Datei für die Klasse erstellen.<br />
Nur wie genau beschreibe ich die Klasse in einer Header-Datei? Bei einer Funktion war es noch leicht --&gt; z.b. float funktionsname(float variablename);<br />
Als Beispiel vielleicht meine Klasse, die ich in einer Header-Datei auslagern möchte.</p>
<pre><code class="language-cpp">class Koerper
{
    private:

    float masse;
    float xPosition;
    float yPosition;
    float xGeschwindigkeit;
    float yGeschwindigkeit;
    float betragGeschwindigkeit, xBeschleunigung, yBeschleunigung;

    public:

    Koerper(float m)
    {
        masse = m;
        xPosition = 0;
        yPosition = 0;
        xGeschwindigkeit = 0;
        yGeschwindigkeit = 0;
        betragGeschwindigkeit = 0;
        xBeschleunigung = 0;
        yBeschleunigung = 0;
    }

    string text()
    {
        stringstream s;
        s &lt;&lt; &quot;(&quot; &lt;&lt; xPosition &lt;&lt; &quot;,&quot; &lt;&lt; yPosition &lt;&lt; &quot;)&quot; &lt;&lt; endl;
        return s.str();
    }

    float bewege(Vektor z, const float dt)
    {
        xBeschleunigung = z.xKraft / masse;
        yBeschleunigung = z.yKraft / masse;

        xGeschwindigkeit += dt * xBeschleunigung;
		yGeschwindigkeit += dt * yBeschleunigung;

		xPosition += dt * xGeschwindigkeit;
		yPosition += dt * yGeschwindigkeit;
    }

    float betrag()
    {
        betragGeschwindigkeit = sqrt(xGeschwindigkeit*xGeschwindigkeit+yGeschwindigkeit*yGeschwindigkeit);
        return(betragGeschwindigkeit);
    }
};
</code></pre>
<p>Mein 2. Problem: Auch wieder bei der Kapselung. Wir haben die Aufgabe bekommen einen bestimmten Code zu kapseln und mit einer vorgegebenen Main-Funktion dann auszuführen. In dieser Funktion ist aber ein Aufruf einer Klassen-Funktion die ich nicht ganz verstehe. Wir dürfen leider die Main-Funktion nicht verändern, müssen unseren Code also daran anpassen.</p>
<p>Die Main-Funktion, bzw. der Teil, den ich nicht verstehe:</p>
<pre><code class="language-cpp">kraft.mul(koerper.liefereGeschwindigkeit().betrag());
</code></pre>
<p>Via dieser Funktion soll ich eine neue Kraft berechnen. Dabei wird als Variable der Betrag meiner Geschwindigkeiten verwendet, die in der Klasse Koerper stehen. Ich kann also das ganze auch umschreiben zu</p>
<pre><code class="language-cpp">kraft.mul(koerper.betrag());
</code></pre>
<p>und dann als Funktion in der Klasse koerper diese Funktion verwenden:</p>
<pre><code class="language-cpp">float betrag()
    {
        betragGeschwindigkeit = sqrt(xGeschwindigkeit*xGeschwindigkeit+yGeschwindigkeit*yGeschwindigkeit);
        return(betragGeschwindigkeit);
    }
</code></pre>
<p>Dies funktioniert auch, aber was genau ist mit dem .liefereGeschwindigkeit().betrag() gemeint? Ich kapier nicht einmal, welche Funktion dort aufgerufen wird/wie sie aufgerufen wird.</p>
<p>Ich hoffe ihr könnt mir bei meinen beiden Problem helfen.</p>
<p>mfg Sinsei</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301636/probleme-mit-klassen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 21:49:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301636.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Mar 2012 14:48:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Klassen on Sat, 31 Mar 2012 14:48:04 GMT]]></title><description><![CDATA[<p>Hallo <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>
<p>Da ich seit diesem Semester nun von C+ auf C++ umgestiegen bin, dort aber noch ab und an Probleme habe, frage ich nun einfach mal hier nach.</p>
<p>Mein 1. Problem: Wir lernen derzeit die Kapselung. Dazu haben wir ein Programm erhalten, indem wir Klassen erstellen sollten und möglichst in Header-Dateien auslagern sollten.<br />
Sofern ich nicht falsch liege, sollte man also extra eine Header-Datei, sowie eine cpp-Datei für die Klasse erstellen.<br />
Nur wie genau beschreibe ich die Klasse in einer Header-Datei? Bei einer Funktion war es noch leicht --&gt; z.b. float funktionsname(float variablename);<br />
Als Beispiel vielleicht meine Klasse, die ich in einer Header-Datei auslagern möchte.</p>
<pre><code class="language-cpp">class Koerper
{
    private:

    float masse;
    float xPosition;
    float yPosition;
    float xGeschwindigkeit;
    float yGeschwindigkeit;
    float betragGeschwindigkeit, xBeschleunigung, yBeschleunigung;

    public:

    Koerper(float m)
    {
        masse = m;
        xPosition = 0;
        yPosition = 0;
        xGeschwindigkeit = 0;
        yGeschwindigkeit = 0;
        betragGeschwindigkeit = 0;
        xBeschleunigung = 0;
        yBeschleunigung = 0;
    }

    string text()
    {
        stringstream s;
        s &lt;&lt; &quot;(&quot; &lt;&lt; xPosition &lt;&lt; &quot;,&quot; &lt;&lt; yPosition &lt;&lt; &quot;)&quot; &lt;&lt; endl;
        return s.str();
    }

    float bewege(Vektor z, const float dt)
    {
        xBeschleunigung = z.xKraft / masse;
        yBeschleunigung = z.yKraft / masse;

        xGeschwindigkeit += dt * xBeschleunigung;
		yGeschwindigkeit += dt * yBeschleunigung;

		xPosition += dt * xGeschwindigkeit;
		yPosition += dt * yGeschwindigkeit;
    }

    float betrag()
    {
        betragGeschwindigkeit = sqrt(xGeschwindigkeit*xGeschwindigkeit+yGeschwindigkeit*yGeschwindigkeit);
        return(betragGeschwindigkeit);
    }
};
</code></pre>
<p>Mein 2. Problem: Auch wieder bei der Kapselung. Wir haben die Aufgabe bekommen einen bestimmten Code zu kapseln und mit einer vorgegebenen Main-Funktion dann auszuführen. In dieser Funktion ist aber ein Aufruf einer Klassen-Funktion die ich nicht ganz verstehe. Wir dürfen leider die Main-Funktion nicht verändern, müssen unseren Code also daran anpassen.</p>
<p>Die Main-Funktion, bzw. der Teil, den ich nicht verstehe:</p>
<pre><code class="language-cpp">kraft.mul(koerper.liefereGeschwindigkeit().betrag());
</code></pre>
<p>Via dieser Funktion soll ich eine neue Kraft berechnen. Dabei wird als Variable der Betrag meiner Geschwindigkeiten verwendet, die in der Klasse Koerper stehen. Ich kann also das ganze auch umschreiben zu</p>
<pre><code class="language-cpp">kraft.mul(koerper.betrag());
</code></pre>
<p>und dann als Funktion in der Klasse koerper diese Funktion verwenden:</p>
<pre><code class="language-cpp">float betrag()
    {
        betragGeschwindigkeit = sqrt(xGeschwindigkeit*xGeschwindigkeit+yGeschwindigkeit*yGeschwindigkeit);
        return(betragGeschwindigkeit);
    }
</code></pre>
<p>Dies funktioniert auch, aber was genau ist mit dem .liefereGeschwindigkeit().betrag() gemeint? Ich kapier nicht einmal, welche Funktion dort aufgerufen wird/wie sie aufgerufen wird.</p>
<p>Ich hoffe ihr könnt mir bei meinen beiden Problem helfen.</p>
<p>mfg Sinsei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197341</guid><dc:creator><![CDATA[Sinsei]]></dc:creator><pubDate>Sat, 31 Mar 2012 14:48:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Klassen on Sat, 31 Mar 2012 15:05:17 GMT]]></title><description><![CDATA[<p>1. So:</p>
<pre><code class="language-cpp">// .h / .hpp
struct A
{
  void foo();
};
</code></pre>
<pre><code class="language-cpp">// .cpp
void A::foo()
{
  // ...
}
</code></pre>
<ol start="2">
<li></li>
</ol>
<p>Du sollst eine Klasse &quot;Geschwindigkeit&quot; erstellen, die eine Memberfunktion &quot;betrag()&quot; hat. Ein Objekt dieser Klasse wird dann von .liefereGeschwindigkeit() zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197348</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 31 Mar 2012 15:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Klassen on Sat, 31 Mar 2012 15:19:57 GMT]]></title><description><![CDATA[<p>Danke schon mal zu der schnellen Antwort <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 />
zu 1.<br />
heißt also ich hab die Klasse an sich in der Header-Datei und die Funktionen, die in der Klasse sind in der .cpp-Datei?</p>
<p>zu 2.</p>
<p>wenn liefereGeschwindigkeit an sich eine Klasse sein soll, würde das ganze ja so aussehen:</p>
<pre><code class="language-cpp">class Koerper
{
...
   class liefereGeschwindigkeit
    {
        float betrag()
        {
            betragGeschwindigkeit = sqrt(xGeschwindigkeit*xGeschwindigkeit+yGeschwindigkeit*yGeschwindigkeit);
            return(betragGeschwindigkeit);
        }
    };

};
</code></pre>
<p>Nur bekomm ich dann das Problem, dass ich nicht auf die Variablen in der Klasse koerper nicht mehr zugreifen kann. Fehlermeldung:<br />
error: invalid use of nonstatic data member 'Koerper::xGeschwindigkeit'<br />
Und laut der Main-Funktion übergeben wir ja keine Werte an die Funktion betrag:</p>
<pre><code class="language-cpp">kraft.mul(koerper.liefereGeschwindigkeit().betrag());
</code></pre>
<p>Also irgendwie blick ich beim 2. immer noch nicht ganz durch, was er überhaupt von mir will. An sich funktioniert ja das ganze Programm wenn ich das liefereGeschwindigkeit weglasse und einfach nur die Funktion betrag in die Klasse Koerper reinsetzte und später aufrufe.</p>
<p>mfg Sinsei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197356</guid><dc:creator><![CDATA[Sinsei]]></dc:creator><pubDate>Sat, 31 Mar 2012 15:19:57 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Klassen on Sat, 31 Mar 2012 15:25:42 GMT]]></title><description><![CDATA[<p>Sinsei schrieb:</p>
<blockquote>
<p>heißt also ich hab die Klasse an sich in der Header-Datei und die Funktionen, die in der Klasse sind in der .cpp-Datei?</p>
</blockquote>
<p>Ja. bzw. statische Variablen definierst du auch in der .cpp. (Deklaration in .hpp)</p>
<p>Sinsei schrieb:</p>
<blockquote>
<p>wenn liefereGeschwindigkeit an sich eine Klasse sein soll</p>
</blockquote>
<p>Nein. Die Funktion liefert ein Objekt der (von dir erstellten) Klasse &quot;Geschwindigkeit&quot;. Diese Klasse hat eine Methode &quot;betrag()&quot;, und die liefert float.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197359</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 31 Mar 2012 15:25:42 GMT</pubDate></item></channel></rss>