<?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 beim Ueberladen von []]]></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>Ich habe ein Problem mit dem Übeladen des []-Operators. Ich habe eine Übungsaufgabe bearbeitet, in der man eine Klass erstellen sollte, die ein Double-Array simuliert- d.h. auch die Addition von Arrays ermöglicht, die Initialisierung eines Arrays mit einem anderen usw.</p>
<p>Das hat auch alles fast so geklappt nur wenn ich z.B. so einen Ausdruck habe:</p>
<p>CDoubleArray array;<br />
array[0] = 1.1;</p>
<p>Dann meldet der Compiler (logischerweise) einen Fehler, dass ich array[] nichts zuweisen kann. Ich hab den Code mal angefügt und würde mich freuen, wenn mir jmd. etwas dazu sagen könnte, weil ich z.Z. irgendwie ein Brett vor dem Kopf hab <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=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class CDoubleArray {
      private:
              double *doubleArray;
              int array_size;

      public:
             CDoubleArray() {}    // Default Konstruktor

             CDoubleArray(int size) {                 //Konstruktor nur mir Größenangabe
                            doubleArray = new double[(size +1)];
                            array_size = size;
                            }

             CDoubleArray(int size, const double *dptr) {               //Konstruktor, welches eine Initialisierung
                              doubleArray = new double[(size +1)];      //mit einem anderen Array ermöglicht
                              for (int i=0; (i &lt;= size &amp;&amp; dptr[i]);  ++i) {
                                  doubleArray[i] = dptr[i];
                                  }
                              array_size = size;
                              }

             ~CDoubleArray() {
                             // std::cout &lt;&lt; &quot;Im Destruktor!\n&quot;;
                             if (*doubleArray) delete[] doubleArray;
                             }

             int getArraySize() const {
                  return array_size;
                  }

             bool setArraySize(int newsize);

             void operator=(const CDoubleArray &amp;vorbild);

             double operator[](int position) const;

             }; //Ende Class CDoubleArray

             bool CDoubleArray::setArraySize(int newsize) {
                  if (newsize &lt;= array_size) return false;          //Aktion fehlgeschlagen - nichts zu tun
                  double *temp_array = new double[array_size+1];    // Alte Elemente kopieren um altes Array zu löschen
                  for (int z=0; (z &lt;= array_size &amp;&amp; doubleArray[z]); ++z) {
                      temp_array[z] = doubleArray[z];
                      }
                  delete[] doubleArray;
                  doubleArray = new double[newsize];                 //neues Array erstellen

                  for (int z=0; (z &lt;= array_size &amp;&amp; temp_array[z]); ++z) { //Elemente zurückkopieren
                      doubleArray[z] = temp_array[z];
                      }

                  delete[] temp_array;
                  array_size = newsize;

                  //std::cout &lt;&lt; &quot;Array vergroessert!\n&quot;;

                  return true;                       //Aktion erfolgreich
                  }

             void CDoubleArray::operator=(const CDoubleArray &amp;vorbild) {   //Ermöglicht es Arrays einander zuzuweisen

                       if (array_size &lt; vorbild.getArraySize()) {      //Array zu klein? Vergrößern!
                                      setArraySize(vorbild.getArraySize()); 
                                      }

                       for (int i=0; ((i &lt;= array_size )&amp;&amp; vorbild[i]);  ++i) {  //Kopiere Elemente
                                  this-&gt;doubleArray[i] = vorbild[i];
                                  }                  
                                  }

             double CDoubleArray::operator[](int position) const{    //Überladener []-Operator um Index-Verwendung zu 
                                                                      //ermöglichen
                           return doubleArray[position];       
                           }

//MAIN

int main() {

    CDoubleArray First(5);

    double array[10] = {1.1, 1.2, 1.3};

    std::cout &lt;&lt; &quot;First ist &quot; &lt;&lt; First.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    CDoubleArray Second(2, array);

    std::cout &lt;&lt; &quot;Second ist &quot; &lt;&lt; Second.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    CDoubleArray Third = Second; 

    std::cout &lt;&lt; &quot;Third ist &quot; &lt;&lt; Third.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    std::cout &lt;&lt; &quot;Erstes und zweites Element von Third: &quot; &lt;&lt; Third[0] &lt;&lt; &quot; &quot; &lt;&lt; Third[1] &lt;&lt; &quot;\n&quot;;

    Third.setArraySize(10);

    std::cout &lt;&lt; &quot;Third ist &quot; &lt;&lt; Third.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    return 0;
}
</code></pre>
<p>Das Programm erzeugt folgende (erwartete) Ausabe:</p>
<blockquote>
<p>First ist 2 Einheiten groß<br />
Second ist 2 Einheiten groß<br />
Third ist 2 Einheiten groß<br />
Erstes und zweites Element von Third: 1.1 1.2<br />
Third ist 10 Einheiten groß</p>
</blockquote>
<p>Ich denke die Aufgabe ist solange noch nicht richtig abgeschlossen, solange ich das CDoubleArray nicht wirklich wie ein Array benutzen kann.<br />
Eine Zuweisung wie<br />
First[1] = 1.1;<br />
sollte also möglich sein.</p>
<p>Also den =operator für eine Double zu überladen wäre wahrscheinlich der erste Schritt:<br />
[cpp]void operator=(double double_to_add) {...} [code]<br />
Aber woher weiß ich, auf welchen Index von &quot;doubleArray&quot; (private: double *doubleArray) ich zugreife?</p>
<p>Wer noch Zeit hat, dem wäre ich dankbar, wenn er Kritik (bitte konstruktiv <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="😉"
    /> ) an meinem Programmierstil äußern könnte. Man selbst übersieht seine Fehler ja schnell.</p>
<p>Vielen Dank schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121175/probleme-beim-ueberladen-von</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 15:21:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121175.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Sep 2005 06:09:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim Ueberladen von [] on Wed, 21 Sep 2005 06:09:41 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>Ich habe ein Problem mit dem Übeladen des []-Operators. Ich habe eine Übungsaufgabe bearbeitet, in der man eine Klass erstellen sollte, die ein Double-Array simuliert- d.h. auch die Addition von Arrays ermöglicht, die Initialisierung eines Arrays mit einem anderen usw.</p>
<p>Das hat auch alles fast so geklappt nur wenn ich z.B. so einen Ausdruck habe:</p>
<p>CDoubleArray array;<br />
array[0] = 1.1;</p>
<p>Dann meldet der Compiler (logischerweise) einen Fehler, dass ich array[] nichts zuweisen kann. Ich hab den Code mal angefügt und würde mich freuen, wenn mir jmd. etwas dazu sagen könnte, weil ich z.Z. irgendwie ein Brett vor dem Kopf hab <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=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class CDoubleArray {
      private:
              double *doubleArray;
              int array_size;

      public:
             CDoubleArray() {}    // Default Konstruktor

             CDoubleArray(int size) {                 //Konstruktor nur mir Größenangabe
                            doubleArray = new double[(size +1)];
                            array_size = size;
                            }

             CDoubleArray(int size, const double *dptr) {               //Konstruktor, welches eine Initialisierung
                              doubleArray = new double[(size +1)];      //mit einem anderen Array ermöglicht
                              for (int i=0; (i &lt;= size &amp;&amp; dptr[i]);  ++i) {
                                  doubleArray[i] = dptr[i];
                                  }
                              array_size = size;
                              }

             ~CDoubleArray() {
                             // std::cout &lt;&lt; &quot;Im Destruktor!\n&quot;;
                             if (*doubleArray) delete[] doubleArray;
                             }

             int getArraySize() const {
                  return array_size;
                  }

             bool setArraySize(int newsize);

             void operator=(const CDoubleArray &amp;vorbild);

             double operator[](int position) const;

             }; //Ende Class CDoubleArray

             bool CDoubleArray::setArraySize(int newsize) {
                  if (newsize &lt;= array_size) return false;          //Aktion fehlgeschlagen - nichts zu tun
                  double *temp_array = new double[array_size+1];    // Alte Elemente kopieren um altes Array zu löschen
                  for (int z=0; (z &lt;= array_size &amp;&amp; doubleArray[z]); ++z) {
                      temp_array[z] = doubleArray[z];
                      }
                  delete[] doubleArray;
                  doubleArray = new double[newsize];                 //neues Array erstellen

                  for (int z=0; (z &lt;= array_size &amp;&amp; temp_array[z]); ++z) { //Elemente zurückkopieren
                      doubleArray[z] = temp_array[z];
                      }

                  delete[] temp_array;
                  array_size = newsize;

                  //std::cout &lt;&lt; &quot;Array vergroessert!\n&quot;;

                  return true;                       //Aktion erfolgreich
                  }

             void CDoubleArray::operator=(const CDoubleArray &amp;vorbild) {   //Ermöglicht es Arrays einander zuzuweisen

                       if (array_size &lt; vorbild.getArraySize()) {      //Array zu klein? Vergrößern!
                                      setArraySize(vorbild.getArraySize()); 
                                      }

                       for (int i=0; ((i &lt;= array_size )&amp;&amp; vorbild[i]);  ++i) {  //Kopiere Elemente
                                  this-&gt;doubleArray[i] = vorbild[i];
                                  }                  
                                  }

             double CDoubleArray::operator[](int position) const{    //Überladener []-Operator um Index-Verwendung zu 
                                                                      //ermöglichen
                           return doubleArray[position];       
                           }

//MAIN

int main() {

    CDoubleArray First(5);

    double array[10] = {1.1, 1.2, 1.3};

    std::cout &lt;&lt; &quot;First ist &quot; &lt;&lt; First.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    CDoubleArray Second(2, array);

    std::cout &lt;&lt; &quot;Second ist &quot; &lt;&lt; Second.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    CDoubleArray Third = Second; 

    std::cout &lt;&lt; &quot;Third ist &quot; &lt;&lt; Third.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    std::cout &lt;&lt; &quot;Erstes und zweites Element von Third: &quot; &lt;&lt; Third[0] &lt;&lt; &quot; &quot; &lt;&lt; Third[1] &lt;&lt; &quot;\n&quot;;

    Third.setArraySize(10);

    std::cout &lt;&lt; &quot;Third ist &quot; &lt;&lt; Third.getArraySize() &lt;&lt; &quot; Einheiten gross!\n&quot;;

    return 0;
}
</code></pre>
<p>Das Programm erzeugt folgende (erwartete) Ausabe:</p>
<blockquote>
<p>First ist 2 Einheiten groß<br />
Second ist 2 Einheiten groß<br />
Third ist 2 Einheiten groß<br />
Erstes und zweites Element von Third: 1.1 1.2<br />
Third ist 10 Einheiten groß</p>
</blockquote>
<p>Ich denke die Aufgabe ist solange noch nicht richtig abgeschlossen, solange ich das CDoubleArray nicht wirklich wie ein Array benutzen kann.<br />
Eine Zuweisung wie<br />
First[1] = 1.1;<br />
sollte also möglich sein.</p>
<p>Also den =operator für eine Double zu überladen wäre wahrscheinlich der erste Schritt:<br />
[cpp]void operator=(double double_to_add) {...} [code]<br />
Aber woher weiß ich, auf welchen Index von &quot;doubleArray&quot; (private: double *doubleArray) ich zugreife?</p>
<p>Wer noch Zeit hat, dem wäre ich dankbar, wenn er Kritik (bitte konstruktiv <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="😉"
    /> ) an meinem Programmierstil äußern könnte. Man selbst übersieht seine Fehler ja schnell.</p>
<p>Vielen Dank schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876744</guid><dc:creator><![CDATA[++Gast]]></dc:creator><pubDate>Wed, 21 Sep 2005 06:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Ueberladen von [] on Wed, 21 Sep 2005 06:35:05 GMT]]></title><description><![CDATA[<p>Du musst im op[] eine Referenz zurückgeben <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="😉"
    /> So machst Du ja eine Kopie und der Wert kommt nie im Array an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876756</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 21 Sep 2005 06:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Ueberladen von [] on Wed, 21 Sep 2005 06:41:19 GMT]]></title><description><![CDATA[<p>außerdem darf der operator nicht mehr const sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876764</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 21 Sep 2005 06:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Ueberladen von [] on Wed, 21 Sep 2005 07:30:10 GMT]]></title><description><![CDATA[<p>Er darf durchaus const sein, da er das Objekt physikalisch nicht verändert.</p>
<p>Da man aber ein modifizierbares Handle auf interne Daten rausgibt, ist er logisch gesehen nicht const - und sollte folglich richtig auch nicht const deklariert sein.<br />
(wenn this const ist, wird <em>double</em> doubleArray* zu <em>double * const doubleArray</em>, nicht <em>const double</em>* doubleArray)</p>
<p>Da man operator[] aber auch gerne in const-Situationen benutzen möchte, sollte man eine const Variante á la<br />
const double&amp; operator[]( std::size_t index) const<br />
hinzufügen.</p>
<p>Das vielleicht auch noch als Tip an ++Gast: Parameter, die sich auf den Index beziehen, sollten immer std::size_t oder zumindest unsigned sein, da negative Subscripts keinen Sinn machen in deiner Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876787</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 21 Sep 2005 07:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Ueberladen von [] on Wed, 21 Sep 2005 19:34:43 GMT]]></title><description><![CDATA[<p>Danke Leute, ich habs jetzt. Der (Denk-)Fehler war, dass ich ernsthaft glaubte den =-Operator überladen zu müssen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<blockquote>
<p>Das vielleicht auch noch als Tip an ++Gast: Parameter, die sich auf den Index beziehen, sollten immer std::size_t oder zumindest unsigned sein, da negative Subscripts keinen Sinn machen in deiner Klasse.</p>
</blockquote>
<p>Danke, werde ich umsetzen <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/877376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877376</guid><dc:creator><![CDATA[++Gast]]></dc:creator><pubDate>Wed, 21 Sep 2005 19:34:43 GMT</pubDate></item></channel></rss>