<?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[Matrix-Klasse | dyn Array in Klasse]]></title><description><![CDATA[<p>Kurze Frage:</p>
<p>Ich möchte mir ne Matrix Klasse bauen... Die sieht so aus...</p>
<pre><code class="language-cpp">class matrix
{
	public:
		matrix(int Zeile, int Spalte);
		~matrix();
		double get(int Zeile, int Spalte);
		void set(int Zeile, int Spalte, double Value);
		int getRang();
		int size();
		void output_Matrix();

	private:
		int Zeile_;
		int Spalte_;
		int Rang;
		double *Speicher; 
};
</code></pre>
<p>Diese Matrix soll eine dynamische Größe haben. Also Zeile * Spalte.<br />
Das alles tu ich in nem Vektor abspeichern. Da ich ja in der Klassendeklaration nicht double Speicher[Zeile*Spalte] schreiben kann (habs probiert) hab ich nen Pointer gemacht.</p>
<p>Im Konstruktor erstell ich mir dann dyn. ein Array. Mein Pointer zeigt dann auf dieses Array</p>
<p>So halt:</p>
<pre><code class="language-cpp">matrix::matrix(int Zeile, int Spalte)
{
	double *SP = new double(Zeile*Spalte);

	this-&gt;S = SP;
        // bla bla bla

	for (int i=0; i&lt; Zeile*Spalte; i++)	S[i] = 0;

}
</code></pre>
<p>Frage 1: Ist das so geschickt?<br />
Frage 2: Wie tu ich dann dieses dyn Array wieder löschen?</p>
<p>vielen Dank soweit</p>
<p>Cascoin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298454/matrix-klasse-dyn-array-in-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 13:18:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298454.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Jan 2012 11:47:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 11:47:19 GMT]]></title><description><![CDATA[<p>Kurze Frage:</p>
<p>Ich möchte mir ne Matrix Klasse bauen... Die sieht so aus...</p>
<pre><code class="language-cpp">class matrix
{
	public:
		matrix(int Zeile, int Spalte);
		~matrix();
		double get(int Zeile, int Spalte);
		void set(int Zeile, int Spalte, double Value);
		int getRang();
		int size();
		void output_Matrix();

	private:
		int Zeile_;
		int Spalte_;
		int Rang;
		double *Speicher; 
};
</code></pre>
<p>Diese Matrix soll eine dynamische Größe haben. Also Zeile * Spalte.<br />
Das alles tu ich in nem Vektor abspeichern. Da ich ja in der Klassendeklaration nicht double Speicher[Zeile*Spalte] schreiben kann (habs probiert) hab ich nen Pointer gemacht.</p>
<p>Im Konstruktor erstell ich mir dann dyn. ein Array. Mein Pointer zeigt dann auf dieses Array</p>
<p>So halt:</p>
<pre><code class="language-cpp">matrix::matrix(int Zeile, int Spalte)
{
	double *SP = new double(Zeile*Spalte);

	this-&gt;S = SP;
        // bla bla bla

	for (int i=0; i&lt; Zeile*Spalte; i++)	S[i] = 0;

}
</code></pre>
<p>Frage 1: Ist das so geschickt?<br />
Frage 2: Wie tu ich dann dieses dyn Array wieder löschen?</p>
<p>vielen Dank soweit</p>
<p>Cascoin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170411</guid><dc:creator><![CDATA[casicas13]]></dc:creator><pubDate>Fri, 20 Jan 2012 11:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 11:52:33 GMT]]></title><description><![CDATA[<p>casicas13 schrieb:</p>
<blockquote>
<p>Diese Matrix soll eine dynamische Größe haben. Also Zeile * Spalte.<br />
Das alles tu ich in nem Vektor abspeichern. Da ich ja in der Klassendeklaration nicht double Speicher[Zeile*Spalte] schreiben kann (habs probiert) hab ich nen Pointer gemacht.</p>
</blockquote>
<p>So nah und doch so fern. Hättest du vector statt Vektor geschrieben, hättest du die perfekte Lösung.</p>
<blockquote>
<p>Frage 1: Ist das so geschickt?</p>
</blockquote>
<p>Jain. An sich eine gute Idee, aber du erfindest gerade die Standardbibliothek neu.</p>
<blockquote>
<p>Frage 2: Wie tu ich dann dieses dyn Array wieder löschen?</p>
</blockquote>
<p>Im Destruktor. Google mal RAII.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170414</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 20 Jan 2012 11:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Sat, 07 Apr 2012 11:56:05 GMT]]></title><description><![CDATA[<p>casicas13 schrieb:</p>
<blockquote>
<p>Frage 1: Ist das so geschickt?<br />
Frage 2: Wie tu ich dann dieses dyn Array wieder löschen?</p>
</blockquote>
<p>Zu 1:<br />
Nein. Als Übung zum Thema Resourcenverwaltung, ja. Du erfindest aber das Rad &quot;vector&quot; neu. Das ist natürlich nicht nötig.</p>
<p>Zu 2:<br />
Überlässt du die Verwaltung einer Resource (wie reserviertern Speicher) einem Objekt (was immer eine gute Idee ist), solltst Du der Klasse einen selbstgeschriebenen Destruktor spendieren, der diese Resource wieder freigibt und auch darauf achten, dass Kopieroperationen, die der Compiler gerne selbst erzeugt, auch das richtige Verhalten haben <em>oder</em> eben explizit deaktiviert werden. Mit Kopieroperationen meine ich den Kopierkonstruktor und den Zuweisungsoperator. Stichwort: Dreierregel.</p>
<p>Wenn Du stattdessen einfach std::vector verwendest, musst Du Dich um die Verwaltung des dynamisch reservierten Speichers gar nicht kümmern. Das macht std::vector ja schon:</p>
<pre><code class="language-cpp">#include &lt;cassert&gt;
#include &lt;vector&gt;

class matrix
{
public:
    matrix()
    : zeilen_(0), spalten_(0)
    {}

    matrix(int Zeilen, int Spalten)
    { resize(Zeilen,Spalten); }

    void resize(int Zeilen, int Spalten);

    int zeilen()  const {return zeilen_;}
    int spalten() const {return spalten_;}

    double  operator()(int i, int j) const {return elemente_[index_von(i,j)];}
    double&amp; operator()(int i, int j)       {return elemente_[index_von(i,j)];}

private:
    typedef std::vector&lt;double&gt;::size_type size_type;

    size_type index_von(int i, int j) const {
        assert(0&lt;=i &amp;&amp; i&lt;zeilen_);
        assert(0&lt;=j &amp;&amp; j&lt;spalten_);
        return size_type(i)*spalten_ + j;
    }

    int zeilen_;
    int spalten_;
    std::vector&lt;double&gt; elemente_;
};

//--- noch zu implementieren in einer cpp-datei:

void matrix::resize(int Zeilen, int Spalten)
{
  elemente_.resize(size_type(Zeilen)*size_type(Spalten));
}
</code></pre>
<p>Ein Matrix-Objekt ist damit ganz automatisch kopier- und zuweisbar, ohne dass da viel schief gehen kann. Die Vom Compiler erzeugten Operationen kopieren elementweise, also zwei ints und einen vector.</p>
<p>Edit: const bei index_von vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170472</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 07 Apr 2012 11:56:05 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 13:32:10 GMT]]></title><description><![CDATA[<p>Ze fix,</p>
<p>Ich dank euch beiden.... Jetzt hab ichs grad (fast) so gemacht wie &quot;krümelkacker&quot;. Nur halt ohne die Operatoren...<br />
Aber ich glaub ich übernehm einfach deins...<br />
Danke!<br />
Cascoin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170490</guid><dc:creator><![CDATA[casicas131]]></dc:creator><pubDate>Fri, 20 Jan 2012 13:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 13:40:08 GMT]]></title><description><![CDATA[<p>Wenn <code>zeilen</code> und <code>spalten</code> jetzt noch vom Typ <code>std::size_t</code> statt <code>int</code> wären würde ich vorschlagen, das in die FAQ aufzunehmen (vielleicht sogar noch als templated Version). Die Frage nach irgendwelchen 2D Arrays taucht hier im Forum doch ziemlich häufig auf, und meistens wird eine Lösung vorgestellt, die der hier sehr ähnlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170494</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 20 Jan 2012 13:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 13:44:53 GMT]]></title><description><![CDATA[<p>Jetzt hab ich doch noch was:<br />
Also ich habs jetzt genau so bei mir reinkopiert...Leider funktioniert des nicht.<br />
Der hat mit den Operatoren ein Problem.</p>
<p>Hier mal die Fehlermeldung:<br />
error:</p>
<pre><code class="language-cpp">passing ‘const matrix2’ as ‘this’ argument of ‘size_t matrix2::index_von(int, int)’ discards qualifiers
</code></pre>
<p>(Ich versteh leider nicht warum ihm das nicht gefällt....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170496</guid><dc:creator><![CDATA[casicas131]]></dc:creator><pubDate>Fri, 20 Jan 2012 13:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 13:49:47 GMT]]></title><description><![CDATA[<p>Mach die <code>index_von</code> Methode <code>const</code> .</p>
<p>Edit:<br />
Und wenn du das so einsetzen willst solltest du den Code in Header- und Implementationsdatei aufteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170499</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 20 Jan 2012 13:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 13:56:31 GMT]]></title><description><![CDATA[<p>Du hast irgendwo ein konstante Matrix. Für diese Matrix kannst du nur konstante Methoden aufrufen - das sind Methoden, die den Zustand des Objektes nicht ändern (ja, ich weiß, es gibt &quot;mutable&quot;...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170503</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 20 Jan 2012 13:56:31 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 15:02:11 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Mach die <code>index_von</code> Methode <code>const</code> .</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Flüchtigkeitsfehler meinerseits.</p>
<p>Also, von wegen FAQ Eintrag: Sicherlich ist das mal interessant, so ein Codebeispiel zu sehen. Aber vorgefertigt und noch einen Tucken flexibler gibt es da ja auch schon: boost::multi_array</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170528</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 20 Jan 2012 15:02:11 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix-Klasse | dyn Array in Klasse on Fri, 20 Jan 2012 15:11:47 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Also, von wegen FAQ Eintrag: Sicherlich ist das mal interessant, so ein Codebeispiel zu sehen. Aber vorgefertigt und noch einen Tucken flexibler gibt es da ja auch schon: boost::multi_array</p>
</blockquote>
<p>Leuten, die boost installieren und benutzen, traue ich auch zu, dass sie ein 2D Arrayklasse programmieren können. Oft fragen aber Anfänger, die sich erst seit kurzem mit C++ beschäftigen (z.B. im Rahmen einer Hausaufgabe/Semesterarbeit), und die benutzen so gut wie nie boost.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170531</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 20 Jan 2012 15:11:47 GMT</pubDate></item></channel></rss>