<?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[Speicherverwaltung, Operatorüberladung]]></title><description><![CDATA[<p>Hallo,</p>
<p>malwieder so ne Übungsaufgabe. Ich komme leider nicht weiter. Die stellen an dehnen ich Probleme habe hab ich mit // versehen. Wäre dankbar für eure Hilfe.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Vektor
{
    private:
        const int dim;                             // soll laut Übung const sein
        int *komponenten;

    public:
        ~Vektor(); 
        Vektor(const Vektor&amp; obj);   
        Vektor&amp; operator+=(const Vektor&amp; other);
        Vektor operator+(const Vektor&amp; other);    
};

Vektor::Vektor(const Vektor&amp; obj) : dim(obj.dim)  // so klappt es   
{  
    // dim = obj.dim;                             // so nicht warum?
    komponenten = new int;
    *komponenten = *(obj.komponenten);
}

Vektor::~Vektor()
{
    delete komponenten;
    komponenten = 0;
}

Vektor::Vektor&amp; operator+=(const Vektor&amp; other)
{
    // Komponentenweise Addition der Operanden falls Dimension gleich sonst
    // Ausgabe einer Fehlermeldung
    // ich bekomme die Implementierung nicht hin :-(
}

Vektor::Vektor operator+(const Vektor&amp; other)
{
   // wie bei operator+=
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/117948/speicherverwaltung-operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 05:21:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117948.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Aug 2005 18:22:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 18:22:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>malwieder so ne Übungsaufgabe. Ich komme leider nicht weiter. Die stellen an dehnen ich Probleme habe hab ich mit // versehen. Wäre dankbar für eure Hilfe.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Vektor
{
    private:
        const int dim;                             // soll laut Übung const sein
        int *komponenten;

    public:
        ~Vektor(); 
        Vektor(const Vektor&amp; obj);   
        Vektor&amp; operator+=(const Vektor&amp; other);
        Vektor operator+(const Vektor&amp; other);    
};

Vektor::Vektor(const Vektor&amp; obj) : dim(obj.dim)  // so klappt es   
{  
    // dim = obj.dim;                             // so nicht warum?
    komponenten = new int;
    *komponenten = *(obj.komponenten);
}

Vektor::~Vektor()
{
    delete komponenten;
    komponenten = 0;
}

Vektor::Vektor&amp; operator+=(const Vektor&amp; other)
{
    // Komponentenweise Addition der Operanden falls Dimension gleich sonst
    // Ausgabe einer Fehlermeldung
    // ich bekomme die Implementierung nicht hin :-(
}

Vektor::Vektor operator+(const Vektor&amp; other)
{
   // wie bei operator+=
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/851149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851149</guid><dc:creator><![CDATA[Wernus]]></dc:creator><pubDate>Fri, 12 Aug 2005 18:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 18:44:37 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>zu problem 1)</p>
<p>dim ist als constant declariert, das bedeutet dass dim nach der initialisierung nicht mehr verändert werden darf. Warum man sie initialisiern kann liegt auf der hand; was nützt einem eine konstante deren wert man nicht festlegen kann.</p>
<p>Normalerweise würde man sowas schreiben:</p>
<pre><code class="language-cpp">const int konstante=3;
</code></pre>
<p>Das geht bei klassen und structuren nicht, deswegen gibt es etwas dass sich initialisierungsliste nennt. Nur ctors haben initialisierungslisten und in dieser liste kann man zum beispiel konstanten oder andere member initialisieren.</p>
<pre><code class="language-cpp">foo::foo() : konstante(3){}
</code></pre>
<p>Wie ich bereits sagte darf man eine konstante nach der initialisierung nicht mehr verändern. Die initialisierung erfolgt in der initialisierungsliste oder auch nicht wenn mans einfach weglässt. In diesem fall initialisiert der compiler die variable. Im body des ctors ist das alles schon passiert und deswegen eine zuweisung illegal weil dass ja die bereits initialisierte konstante verändern würde.</p>
<p>zu 2)</p>
<p>Du addierst einfach wie du es bei der vectoren aus der mathematik gewohnt bist und weisst die neuen werte deinem member zu und gibst eine referenz auf das eigene objekt zurück. (stichwort this-zeiger)</p>
<p>zu 3)</p>
<p>Im prinzip wie 2 nur dass du werte nicht zuweisst sondern das ergebnis der addition der componenten einem temporären object vom typ vector zuweisst und dieses zurück gibst als funktionsergebnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/851173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851173</guid><dc:creator><![CDATA[prolog]]></dc:creator><pubDate>Fri, 12 Aug 2005 18:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 19:13:41 GMT]]></title><description><![CDATA[<p>Wäre das so OK? Wie würde das mit + aussehen?</p>
<pre><code class="language-cpp">Vektor::Vektor&amp; operator+=(const Vektor&amp; other)
{
    if(this.dim == other.dim)
    {
       for(int i=0; i&lt;dim; i++)
       {
           *komponenten = *komponenten + *(other.komoponenten);
           komponenten++;
       }
    }

    return *this;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/851194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851194</guid><dc:creator><![CDATA[Wernus]]></dc:creator><pubDate>Fri, 12 Aug 2005 19:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 19:27:14 GMT]]></title><description><![CDATA[<p>komponenten++ ist böse, weil du dadurch den Zeiger in deinem Vektor dauerhaft veränderst. Wenn du es mit einem temporären machst, dürfte es klappen. Vielleicht wäre es auch übersichtlicher, einfach die Index-Schreibweise zu verwenden. <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 />
Amsonsten würde ich noch eine Exception werfen, wenn die Dimensionen nicht passen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/851205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851205</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 12 Aug 2005 19:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 19:29:21 GMT]]></title><description><![CDATA[<p>Ich sehe grad noch, dass keiner was zum delete gesagt hat. Wenn du ein Array löscht, musst du delete[] verwenden. Aber der Konstruktor legt auch nur ein einzelnes int an. Das soll doch ein Array von ints werden, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/851208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851208</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 12 Aug 2005 19:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Fri, 12 Aug 2005 19:50:38 GMT]]></title><description><![CDATA[<p>Wernus schrieb:</p>
<blockquote>
<p>Wäre das so OK?</p>
</blockquote>
<p>Zu dem was Optimizer bereits gesagt hat, kommt noch hinzu, dass this ein Zeiger ist. Du musst deshalb '(*this).dim' oder 'this-&gt;dim' schreiben. Oder this am besten ganz weglassen.</p>
<p>Wernus schrieb:</p>
<blockquote>
<p>Wie würde das mit + aussehen?</p>
</blockquote>
<p>Die binären Non-Assignment Operatoren kann man sehr einfach über die Assignment Operatoren implementieren. Das verhindert Code Redundanz und ist deshalb leichter wartbar und weniger fehleranfällig. Sofern nicht direkt vorgeschrieben, wäre es besser, wenn du op+ ausserhalb der Klasse implementierst.</p>
<pre><code class="language-cpp">Vektor operator +(const Vektor&amp; lhs, const Vektor&amp; rhs)
{
    Vektor tmp(lhs);
    tmp += rhs;
    return tmp;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/851223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851223</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 12 Aug 2005 19:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Sat, 13 Aug 2005 09:49:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bei mir ist jetzt irgendwie die totalle Verwirrung ausgebrochen. Bin auch noch eine totaller Neuling. Naja jedenfalls war in der Aufgabenstellung nur folgendes vorgegeben:</p>
<pre><code class="language-cpp">class Vector
{
    private:
        const int dim;
        int *komponenten;
    public:
        ...
}
</code></pre>
<p>und folgende Deklarationen</p>
<pre><code class="language-cpp">Vektor&amp; operator+=(const Vektor&amp; other);
Vektor operator+(const Vektor&amp; other);
</code></pre>
<p>Nun geht es nur darum die beiden überladenen Operatoren korrekt zu definieren.<br />
Die überladenen Operatoren sollen eine Komponentenweise Additon der Operanden durchführen. Sind die Dimensionen der Operanden verschieden soll mit einer Fehlermeldung abgebrochen werden.</p>
<p>Könnt ihr mir vielleicht die komplette Implementierung der beiden Funktionen angeben. Ich bekomme es einfach nicht hin <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>
]]></description><link>https://www.c-plusplus.net/forum/post/851387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851387</guid><dc:creator><![CDATA[Wernus]]></dc:creator><pubDate>Sat, 13 Aug 2005 09:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherverwaltung, Operatorüberladung on Sat, 13 Aug 2005 09:58:24 GMT]]></title><description><![CDATA[<p>Du solltest es erstmal hinbekommen, im Konstruktor auch wirklich ein Array anzulegen und dieses im Destruktor wieder zu löschen. Vorher hast du gar nichts zum Komponentenweise addieren. Ohne bösartig sein zu wollen, aber ich hoffe, dass dir hier das keiner macht. Du lernst viel mehr, wenn du es von selber hinkriegst.<br />
Was das komponentenweise Addieren dann angeht: Du bist doch mit Arrays einigermaßen vertraut, oder? Du musst doch immer nur die Elemente mit gleichem Index aufaddieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/851391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851391</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 13 Aug 2005 09:58:24 GMT</pubDate></item></channel></rss>