<?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[Class member functions -&amp;gt;  Verständnisproblem]]></title><description><![CDATA[<pre><code class="language-cpp">class Sales_item {
public:
    // operations on Sales_item objects
    double avg_price() const;
    bool same_isbn(const Sales_item &amp;rhs) const
        { return isbn == rhs.isbn; }

private:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};
</code></pre>
<p>Ich verstehe class member function leider immernoch nicht. Wahrscheinlich weil ich den zweck noch nicht verstanden habe.</p>
<p>ich lese immernoch primer, aber auch nach mehrfachem durchlesen verstehe ich es noch nicht zu 100% und ich möchte ungern einfach weiterlesen ohne es verstanden zu haben.</p>
<p>1. Welchen Vorteil haben Class member function gegenüber normalen functions ?</p>
<pre><code class="language-cpp">bool same_isbn(const Sales_item &amp;rhs) const
        { return isbn == rhs.isbn; }
</code></pre>
<p>Okay kommen wir mal zum Kern meines Problems. Dieser Code vergleicht zwei strings (bzw objekte?) miteinander und gibt true oder false zurück.</p>
<p>Diese function wird mit</p>
<pre><code class="language-cpp">total.same_isbn(trans)
</code></pre>
<p>aufgerufen.</p>
<p>ich würde diesen teil als function wahrscheinlich so schreiben.</p>
<pre><code class="language-cpp">bool compare(const string &amp;a, const string &amp;b)
{ return a==b}
</code></pre>
<p>momentan weiß ich garnicht was</p>
<pre><code class="language-cpp">rhs.isbn
</code></pre>
<p>bedeutet.<br />
also dieser &quot;.&quot;.<br />
Was ich mir denken kann ist das<br />
trans, welcher ein string ist</p>
<pre><code class="language-cpp">const Sales_item &amp;rhs
</code></pre>
<p>durch diesen aufruf ein objekt wird, der in dem isbn string, welcher in privat definiert ist, gespeichert wird.</p>
<pre><code class="language-cpp">Total
</code></pre>
<p>wird anscheinend auch in isbn gespeichert.<br />
woher weiß der compiler das total in</p>
<pre><code class="language-cpp">string isbn
</code></pre>
<p>gespeichert werden soll ? was wäre wenn in privat mehrere strings deklariert worden wären. zb</p>
<pre><code class="language-cpp">std::string isbn, isbn2,isbn3,isbn4;
</code></pre>
<p><strong>Ich weiß das sind so viele Fragen, ich erwarte garnicht eine Antwort. Mir würde ein link zu einem anderen Codebeispiel für Classmember functions ausreichen, bzw zu einem anfänger tutorial.</strong></p>
<p>Habt ihr früher auch so viele Probleme mit diesem Kapitel gehabt oder geht es nur mir so ? <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=":/"
      alt="😕"
    /></p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292342/class-member-functions-gt-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 02:57:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292342.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Sep 2011 18:28:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 18:28:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Sales_item {
public:
    // operations on Sales_item objects
    double avg_price() const;
    bool same_isbn(const Sales_item &amp;rhs) const
        { return isbn == rhs.isbn; }

private:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};
</code></pre>
<p>Ich verstehe class member function leider immernoch nicht. Wahrscheinlich weil ich den zweck noch nicht verstanden habe.</p>
<p>ich lese immernoch primer, aber auch nach mehrfachem durchlesen verstehe ich es noch nicht zu 100% und ich möchte ungern einfach weiterlesen ohne es verstanden zu haben.</p>
<p>1. Welchen Vorteil haben Class member function gegenüber normalen functions ?</p>
<pre><code class="language-cpp">bool same_isbn(const Sales_item &amp;rhs) const
        { return isbn == rhs.isbn; }
</code></pre>
<p>Okay kommen wir mal zum Kern meines Problems. Dieser Code vergleicht zwei strings (bzw objekte?) miteinander und gibt true oder false zurück.</p>
<p>Diese function wird mit</p>
<pre><code class="language-cpp">total.same_isbn(trans)
</code></pre>
<p>aufgerufen.</p>
<p>ich würde diesen teil als function wahrscheinlich so schreiben.</p>
<pre><code class="language-cpp">bool compare(const string &amp;a, const string &amp;b)
{ return a==b}
</code></pre>
<p>momentan weiß ich garnicht was</p>
<pre><code class="language-cpp">rhs.isbn
</code></pre>
<p>bedeutet.<br />
also dieser &quot;.&quot;.<br />
Was ich mir denken kann ist das<br />
trans, welcher ein string ist</p>
<pre><code class="language-cpp">const Sales_item &amp;rhs
</code></pre>
<p>durch diesen aufruf ein objekt wird, der in dem isbn string, welcher in privat definiert ist, gespeichert wird.</p>
<pre><code class="language-cpp">Total
</code></pre>
<p>wird anscheinend auch in isbn gespeichert.<br />
woher weiß der compiler das total in</p>
<pre><code class="language-cpp">string isbn
</code></pre>
<p>gespeichert werden soll ? was wäre wenn in privat mehrere strings deklariert worden wären. zb</p>
<pre><code class="language-cpp">std::string isbn, isbn2,isbn3,isbn4;
</code></pre>
<p><strong>Ich weiß das sind so viele Fragen, ich erwarte garnicht eine Antwort. Mir würde ein link zu einem anderen Codebeispiel für Classmember functions ausreichen, bzw zu einem anfänger tutorial.</strong></p>
<p>Habt ihr früher auch so viele Probleme mit diesem Kapitel gehabt oder geht es nur mir so ? <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=":/"
      alt="😕"
    /></p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116318</guid><dc:creator><![CDATA[kantaki]]></dc:creator><pubDate>Wed, 07 Sep 2011 18:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 18:36:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class C // Eine Klasse C
{
public: // Public damit wir &quot;wert&quot; von außen ändern können
  int wert; // Jedes Objekt der Klasse C wird einen eigenen Wert haben
};

int main()
{
  C objekt; // Ein Objekt der Klasse &quot;C&quot;
  objekt.wert = 5; // Die Variable &quot;wert&quot; dieses Objekts hat jetzt den Wert 5
  C objekt2; // Ein neues Objekt
  objekt2.wert = 7; // Die Variable &quot;wert&quot; dieses Objekts hat jetzt den Wert 7
}
</code></pre>
<p>Hilft dir das irgendwie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116321</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 Sep 2011 18:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 18:50:29 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class C // Eine Klasse C
{
public: // Public damit wir &quot;wert&quot; von außen ändern können
  int wert; // Jedes Objekt der Klasse C wird einen eigenen Wert haben
};

int main()
{
  C objekt; // Ein Objekt der Klasse &quot;C&quot;
  objekt.wert = 5; // Die Variable &quot;wert&quot; dieses Objekts hat jetzt den Wert 5
  C objekt2; // Ein neues Objekt
  objekt2.wert = 7; // Die Variable &quot;wert&quot; dieses Objekts hat jetzt den Wert 7
}
</code></pre>
<p>Hilft dir das irgendwie?</p>
</blockquote>
<p>okay dh mit einem objekt der klasse c kann ich per .wert auf die in public definierte variable zugreifen.</p>
<p>momentmal ich glaube ich verstehe den sinn.<br />
beispiel:</p>
<pre><code class="language-cpp">class C // Eine Klasse C
{
public: // Public damit wir &quot;wert&quot; von außen ändern können
  int wert; // Jedes Objekt der Klasse C wird einen eigenen Wert haben
  string name;
  int alter;
};

int main()
{
  C Peter; // Ein Objekt der Klasse &quot;C&quot;
  Peter.koepfe= 5; 
  Peter.name = &quot;Peter&quot;;
  Peter.alter = 22;

  c Tom;
  Tom.koepfe= 2; 
  Tom.name = &quot;Tom&quot;;
  Tom.alter = 17;
}
</code></pre>
<p>dh die klasse ist sowas wie ein bauplan, wo man die variablen nur einmal deklarieren muss.<br />
und ein objekt ist sowas wie ein.... puh... container in dem ich spezielle werte von variablen speichern kann ?</p>
<p>zum ersten mal sehe ich einen vorteil, man müsste dann nicht immer wieder die varibalen neu deklarieren, sondern kann einfach mit einem neuem objekt arbeiten.</p>
<p>okay mal schauen ob ich jetzt die class member function verstehe.</p>
<p>danke schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2764.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--red_heart"
      title="&lt;3"
      alt="❤"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116327</guid><dc:creator><![CDATA[kantaki]]></dc:creator><pubDate>Wed, 07 Sep 2011 18:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 19:00:08 GMT]]></title><description><![CDATA[<p>Ein Objekt ist eine Variable vom Typ der Klasse. D.h. bei <code>std::string str;</code> ist std::string der Typ/die Klasse und str ein Objekt (eine Instanz der Klasse).<br />
Memberfunktionen sind:<br />
1. oft lesbarer als Funktionen, die das Objekt als Parameter nehmen (das compare-Beispiel ist IMHO ein schlechtes Beispiel dafür).<br />
2. vererbbar<br />
3. &quot;polymorphisierbar&quot;, d.h. du kannst sie <code>virtual</code> deklarieren. (das kommt wahrscheinlich später in deinem Buch)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116332</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 07 Sep 2011 19:00:08 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 19:20:37 GMT]]></title><description><![CDATA[<p>okay ja bis auf eine kleine sache habe ich es verstanden ! <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>Wo ist die verbindung von total zu isbn.</p>
<p>kleines beispiel aus dem buch primer :</p>
<pre><code class="language-cpp">sales_item item1;

cin &gt;&gt; item1;

cout &lt;&lt; item1;
</code></pre>
<p>ich würde</p>
<pre><code class="language-cpp">cin &gt;&gt; item1.isbn
</code></pre>
<p>schreiben.</p>
<p>aber anscheinend ist es das selbe.</p>
<p>Kann mir das jemand erklären? Woher weiß der &quot;computer&quot; das die eingabe in einem string gespeichert werden muss ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116340</guid><dc:creator><![CDATA[kantaki]]></dc:creator><pubDate>Wed, 07 Sep 2011 19:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 19:34:58 GMT]]></title><description><![CDATA[<p>kantaki schrieb:</p>
<blockquote>
<p>zum ersten mal sehe ich einen vorteil, man müsste dann nicht immer wieder die varibalen neu deklarieren, sondern kann einfach mit einem neuem objekt arbeiten.</p>
</blockquote>
<p>Soweit hast du den Vorteil einer Struktur verstanden. Strukturen (struct) sind nichts anderes als Klassen, mit dem Unterschied, dass alle Member automatisch &quot;public&quot; sind. (Bei Klassen sind sie automatisch &quot;private&quot;, weshalb man für den Zugriff von außen ein &quot;public:&quot; davor schreiben muss.)</p>
<p>Bei der so genannten Objektorientieren Programmierung ist es üblich, einen Großteil (wenn nicht alle) Member<strong>variablen</strong> vor dem &quot;Nutzer&quot; der Klasse zu verstecken. Die Schnittstelle soll hierbei möglichst klein gehalten werden, sodass schnell zu erkennen ist, wie man die Klasse zu nutzen hat. (Die Schnittstelle ist alles, was public, also von Außen erreichbar ist.)<br />
Memberfunktionen können im Prinzip für alles, was das Objekt irgendwie verändert, oder mit einem anderen Objekt vergleicht verwendet werden.<br />
Hier ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;cctype&gt; // std::isupper
#include &lt;iostream&gt;
#include &lt;string&gt;

class Human // Eine Klasse für einen Menschen
{
  std::string my_name; // Jeder Mensch braucht natürlich einen Namen. Das wäre was für einen Konstruktor, aber hier soll die Sache einfach gehalten werden.
public:
  bool setName(std::string name) // Die Funktion gibt zurück, ob das Setzten des Namens geklappt hat.
  {
    if (std::isupper(name[0])) // Nur &quot;gültige&quot; (eigentlich müsste man natürlich auf mehr prüfen) Namen werden zugelassen.
    {
      my_name = name;
      return true;
    }
    return false;
  }
  std::string getName() // Da die Variable &quot;my_name&quot; privat ist, brauchen wir eine Methode um den aktuellen Namen abfragen zu können.
  {
    return my_name;
  }
};

int main()
{
  Human child; // Ein neuer Mensch
  child.setName(&quot;Hans Peter&quot;); // Mit dem Namen HP
  while (true)
  {
    std::cout &lt;&lt; &quot;Der aktuelle Name lautet: &quot; &lt;&lt; child.getName() &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; &quot;Bitte geben sie einen Namen ein: &quot;;
    std::string name;
    std::getline(std::cin, name);
    if (child.setName(name))
      std::cout &lt;&lt; &quot;Name erfolgreich gesetzt.\n&quot;;
    else
      std::cout &lt;&lt; &quot;Name konnte nicht gesetzt werden.\n&quot;;
  }
}
</code></pre>
<p>Das mag so vielleicht nicht direkt einleuchten, schließlich könnte man auch einfach freie Funktionen dafür definieren. Aber bei größeren Beispielen werden die Vorteile schnell klar, auch von der Denkweise her. Angenommen du Programmierst ein Spiel. Da ist es wesentlich angenehmer zu schreiben &quot;enemy.die();&quot; statt &quot;kill(enemy);&quot;. (Richtig einleuchtend wird's dann mit virtueller Vererbung, aber ich glaube das kommt bei dir erst noch.)</p>
<p>Als nächstes kommen dann Konstruktoren, Vererbung, static, friend? <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116345</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 Sep 2011 19:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 19:23:54 GMT]]></title><description><![CDATA[<p>Du überlädtst den &gt;&gt;-Operator für deine sales_item-Klasse. Das macht deinen aufrufenden Code unabhängig von weiteren Änderungen an der Klasse und es ist kürzer zu schreiben. Aber du kannst auch einfach mal ein paar Kapitel in deinem Buch weiterlesen und schauen, ob sich einiges von selbst erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116347</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 07 Sep 2011 19:23:54 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 20:44:17 GMT]]></title><description><![CDATA[<p>okay also suche ich nach überladen &gt;&gt; ? mal schauen ob ich was finde</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116386</guid><dc:creator><![CDATA[kantaki]]></dc:creator><pubDate>Wed, 07 Sep 2011 20:44:17 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 20:46:10 GMT]]></title><description><![CDATA[<p>Kommt bestimmt noch in deinem Buch. Das wichtige ist, dass du jetzt mit &lt;&lt; auch Objekte deiner Klasse ausgeben kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116387</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 07 Sep 2011 20:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 20:53:53 GMT]]></title><description><![CDATA[<p>ach sieh einer an overloading functions ist direkt im nächsten abschnitt <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/2116390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116390</guid><dc:creator><![CDATA[kantaki]]></dc:creator><pubDate>Wed, 07 Sep 2011 20:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Class member functions -&amp;gt;  Verständnisproblem on Wed, 07 Sep 2011 20:59:07 GMT]]></title><description><![CDATA[<p>Ooverloading operators kommt wahrscheinlich erst später. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2116393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2116393</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 07 Sep 2011 20:59:07 GMT</pubDate></item></channel></rss>