<?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[Fragen zu Klasse und Operatorüberladung]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stell mien Fragen als Kommentare im Code</p>
<pre><code class="language-cpp">//zum vergleich
const int SIZE = 1;       //dies möchte ich benutzen bei *1
const int COMPLETE = 2;

class IntFeld
{
  public:
     IntFeld(int firstNumber = 0);
     ~IntFeld();

     int operator[](int index);

     IntFeld&amp; operator+=(const IntFeld&amp; rhs);
     IntFeld&amp; operator+=(const int newInt);

     bool operator==(const IntFeld&amp; toCompare);
     bool operator&lt;(const IntFeld&amp; toCompare);
     bool operator&gt;(const IntFeld&amp; toCompare);
     bool operator&lt;=(const IntFeld&amp; toCompare);
     bool operator&gt;=(const IntFeld&amp; toCompare);

     int at(int index)const;
     int top()const;
     int first()const;

     void push_back(int newInt);
     void pop_back();

     int size()const;
     int capacity()const;

     bool isEqual(const IntFeld&amp; toCompare,int comparemode); //*1 - als comparemode, ist das eine gute idee? je nachdem ob SIZE oder COMPLETE angeben, macht die funktion einen andren vergleich

  private:
     int*       m_data;
     int        m_index;

};

IntFeld operator+(const IntFeld&amp; lhs,const IntFeld&amp; rhs);   
IntFeld operator+(const IntFeld&amp; lhs,const int newInt);    //wieso kann ich diese operatoren nicht in der klasse deklarieren? Er sagt, das sie nur einen parameter haben sollen, aber wie würden diese dann aufgerufen?Bei + wird doch kein objekt verändert, kann mir das jemand erklären?
</code></pre>
<p>hoffe mir kann jemand meine fragen erklären!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170558/fragen-zu-klasse-und-operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 03:43:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170558.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Jan 2007 13:30:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 13:30:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stell mien Fragen als Kommentare im Code</p>
<pre><code class="language-cpp">//zum vergleich
const int SIZE = 1;       //dies möchte ich benutzen bei *1
const int COMPLETE = 2;

class IntFeld
{
  public:
     IntFeld(int firstNumber = 0);
     ~IntFeld();

     int operator[](int index);

     IntFeld&amp; operator+=(const IntFeld&amp; rhs);
     IntFeld&amp; operator+=(const int newInt);

     bool operator==(const IntFeld&amp; toCompare);
     bool operator&lt;(const IntFeld&amp; toCompare);
     bool operator&gt;(const IntFeld&amp; toCompare);
     bool operator&lt;=(const IntFeld&amp; toCompare);
     bool operator&gt;=(const IntFeld&amp; toCompare);

     int at(int index)const;
     int top()const;
     int first()const;

     void push_back(int newInt);
     void pop_back();

     int size()const;
     int capacity()const;

     bool isEqual(const IntFeld&amp; toCompare,int comparemode); //*1 - als comparemode, ist das eine gute idee? je nachdem ob SIZE oder COMPLETE angeben, macht die funktion einen andren vergleich

  private:
     int*       m_data;
     int        m_index;

};

IntFeld operator+(const IntFeld&amp; lhs,const IntFeld&amp; rhs);   
IntFeld operator+(const IntFeld&amp; lhs,const int newInt);    //wieso kann ich diese operatoren nicht in der klasse deklarieren? Er sagt, das sie nur einen parameter haben sollen, aber wie würden diese dann aufgerufen?Bei + wird doch kein objekt verändert, kann mir das jemand erklären?
</code></pre>
<p>hoffe mir kann jemand meine fragen erklären!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211369</guid><dc:creator><![CDATA[DATO(S)]]></dc:creator><pubDate>Wed, 17 Jan 2007 13:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 13:34:44 GMT]]></title><description><![CDATA[<p>Klar kannst du einen Operator in einer Klasse definieren. In dem Fall wird der erste Operand über den this-Zeiger übergeben.</p>
<p>Zu deinem *1: Die Fallunterscheidung könntest du per if() durchführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211373</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 17 Jan 2007 13:34:44 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 13:41:28 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Klar kannst du einen Operator in einer Klasse definieren. In dem Fall wird der erste Operand über den this-Zeiger übergeben.</p>
</blockquote>
<p>ja das ist mir klar, aber wie sieht dann der aufruf aus?</p>
<p>bei dem ausserhalb (mit 2 parametern) wäre es doch so:</p>
<pre><code class="language-cpp">IntFeld a(1);
IntFeld b(2);
IntFeld c;

c = a+b;
</code></pre>
<p>CStoll schrieb:</p>
<blockquote>
<p>Zu deinem *1: Die Fallunterscheidung könntest du per if() durchführen.</p>
</blockquote>
<p>auch das ist mir klar, ich wollte eher wissen, ob die vorgehensweise mit den const ints gut ist, das ich also es so benutzen kann:</p>
<pre><code class="language-cpp">IntFeld a(1);
IntFeld b(2);

bool ok = b.isEqual(a,SIZE);
</code></pre>
<p>oder wären enums oder so besser?(muss ich da aber nicht immer den klassenqualifizierer mit nennen? klasse::enum? oder wie benutze ich ein enum in klassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211379</guid><dc:creator><![CDATA[DATO(S)]]></dc:creator><pubDate>Wed, 17 Jan 2007 13:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 13:53:33 GMT]]></title><description><![CDATA[<p>Für die Verwendung des Operators spielt es keine Rolle, ob du ihn als globale Funktion oder als Member definiert hast (naja fast, aber die Unterschiede sind hier nicht relevant).</p>
<p>A: In der Klasse:</p>
<pre><code class="language-cpp">class IntFeld
{
public:
  IntFeld operator+(const IntFeld&amp; r) const
  {
    IntFeld tmp = *this;
    tmp+=r;
    return tmp;
  }
};
</code></pre>
<p>B: Als globale Funktion</p>
<pre><code class="language-cpp">IntFeld operator+(const IntFeld&amp; l, const IntFeld&amp; r)
{
  IntFeld tmp = l;
  tmp+=r;
  return tmp;
}
</code></pre>
<p>(ich verzichte mal auf mögliche Optimierungen des Codes, hier geht es um's Prinzip)</p>
<p>In beiden Fällen ist der Compiler in der Lage, den Aufruf <code>c=a+b;</code> zu erkennen und der richtigen Operator-Funktion zuzuordnen.</p>
<p>@equalTo:<br />
Ich würde da vermutlich einen enum verwenden. Falls es dich stört, den Klassennamen mit angeben zu müssen, kannst du ihn auch außerhalb der Klasse anlegen:</p>
<pre><code class="language-cpp">enum CMode { SIZE, COMPLETE };
class IntFeld
{
public:
  bool isEqual(const IntFeld&amp; other,CMode mode);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1211391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211391</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 17 Jan 2007 13:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 14:54:51 GMT]]></title><description><![CDATA[<p>ok, das mit dem enum kann ich machen!<br />
und wo ist denn aber der unterschied zwischen op in klasse und ausserhalb, ich versteh es nicht ganz! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>zeig mir mal ein beispiel, wo der unterschied wichtig ist bitte!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211433</guid><dc:creator><![CDATA[DATO(S)]]></dc:creator><pubDate>Wed, 17 Jan 2007 14:54:51 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Wed, 17 Jan 2007 21:21:36 GMT]]></title><description><![CDATA[<p>Ein Beispiel wäre, wenn du den Operator für eine andere Klasse bzw. einen anderen Typ überladen willst (Nicht bei allen Klassen will/kann man das reinschreiben, z.b. ostream).<br />
Außerdem ist außerhalb kein Überschreiben des Operators möglich.</p>
<p>z.B.:</p>
<pre><code class="language-cpp">// Achtung: pseudo code
std::ostream&amp; operator &lt;&lt; (std::ostream&amp; rStream, const IntFeld&amp; rPrintee);
// oder
IntField operator +(int a, IntField);
// bzw.

class A
{
public:
    virtual A operator +(int n);
};
class B : public A
{
public:
    virtual A operator +(int n);
};
</code></pre>
<p>MfG<br />
DDR-RAM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211644</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Wed, 17 Jan 2007 21:21:36 GMT</pubDate></item><item><title><![CDATA[Reply to Fragen zu Klasse und Operatorüberladung on Thu, 18 Jan 2007 07:21:39 GMT]]></title><description><![CDATA[<p>Globale Operatoren mußt du in zwei Fällen verwenden:</p>
<ol>
<li>du hast keinen Zugriff auf die Klasse des linken Operanden (das betrifft z.B. die IO-Operatoren &lt;&lt; und &gt;&gt; oder auch Build-Ins)</li>
<li>Du willst eine Typumwandlung für den linken Operanden zulassen</li>
</ol>
<pre><code class="language-cpp">class Test
{
public:
  Test(int);//Typumwandlung per Ctor
  ...
};

Test t1;
Test t2 = 5+t1;
//globaler op+: wandelt 5 um und rechnet mit temporärer Variable
//Member-op+: nicht zugelassen
</code></pre>
<p>Aber meist ist es üblicher, die Operatoren in der Klasse anzulegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1211728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1211728</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 18 Jan 2007 07:21:39 GMT</pubDate></item></channel></rss>