<?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[Klasse]]></title><description><![CDATA[<p>Hallo zusammen, ich weis ich habe die Frage schon einmal gestellt und auch tolle Antworten bekommen, aber mir hat man meinen Laptop geklaut, auf dem ich den Link gespeiert habe und hier kann ich den nicht mehr finden.</p>
<p>Folgendes: ich habe folgende Klasse gegeben ( man hat mir hier auch schon gesagt, dass das Programmiertechnisch nicht ganz korrekt ist, aber ich muss genau damit arbeiten)</p>
<pre><code class="language-cpp">#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;cmath&gt;
using namespace std;

class vektor {
	public:
		int dim;
		double *v;

		// Konstruktor, erwartet Dimension als Argument
		// z.b. vektor x(3), y(5), z(3);
		//      v = new vektor(4);
		vektor(unsigned int l) {
			dim=l;
			if(l &gt; 0) 
				v = new double[l];
			else
				v = NULL;
		};

		double norm() {
			double sqnorm = 0.0;
			for (unsigned int i = 0; i &lt; dim; i++) {
				sqnorm = sqnorm + v[i]*v[i];
			}
			return sqrt(sqnorm);
		}

		vektor operator+(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] + v2.v[i];
			}
			return *newv;
		}

		vektor operator-(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] - v2.v[i];
			}
			return *newv;
		}

		// Punktprodukt vektor * vektor
		double operator*(const vektor&amp; v2) const {
	    	assert ( dim == v2.dim );
            double s= 0.0;
            for (unsigned int i = 0; i&lt;dim; i++) {
            	s= s + v[i] * v2.v[i];
            }
        	return s;
        }

		// Praedikat
		bool colinear(const vektor&amp;);

		// vektor * scalar
		vektor&amp; operator*(double scalar) {
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] * scalar;
			}
			return *newv;
		}

		// Wie indizierter Array Zugriff, schreibend und lesend
		double&amp; operator[](int index) {
			assert (index &gt;=0);
			assert (index &lt; dim);
			return v[index];
		}

		vektor&amp;
		resize(int k) {
			int i;
			vektor *newv = new vektor(k);
			for(i = 0; i &lt; fmin(this-&gt;dim, k); i++) {
				newv-&gt;v[i] = this-&gt;v[i];
			}
			for(; i &lt; k; i++) {
				newv-&gt;v[i] = 0;
			}
			return *newv;
		}
};

// output mittels iostream
// Kann keine Methode von vektor sein, weil der erste
// Operand kein vektor ist.
ostream&amp; operator&lt;&lt;(ostream&amp; left, vektor&amp; right) {
	for(unsigned int i=0; i &lt; right.dim; i++) {
		left &lt;&lt; right.v[i] &lt;&lt; &quot; &quot;;
	}
	return left;
}

int
main() {

    vektor X(3);
    X.v[1] = 3;
    X.v[2] = 2;
    X.v[3] = 4;

    vektor Y(3);
    Y.v[1] = 1;
    Y.v[2] = 2;
    Y.v[3] = 1;

    cout &lt;&lt; X.operator-(&amp;Y)&lt;&lt; endl;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>nun habe ich versucht, den minus operator aufzurufen und die beiden Vektoren zu subtrahieren.<br />
Ich weis leider echt nicht wie der Code an der Stelle</p>
<pre><code class="language-cpp">cout &lt;&lt; X.operator-(&amp;Y)&lt;&lt; endl;
</code></pre>
<p>und die ganze main Funktion aussehen muss dass zum Schluss das Ergebnis 2, 0, 3 herauskommt.<br />
Vielen Dank für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301610/klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 21:43:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301610.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Mar 2012 22:19:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse on Fri, 30 Mar 2012 22:19:18 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich weis ich habe die Frage schon einmal gestellt und auch tolle Antworten bekommen, aber mir hat man meinen Laptop geklaut, auf dem ich den Link gespeiert habe und hier kann ich den nicht mehr finden.</p>
<p>Folgendes: ich habe folgende Klasse gegeben ( man hat mir hier auch schon gesagt, dass das Programmiertechnisch nicht ganz korrekt ist, aber ich muss genau damit arbeiten)</p>
<pre><code class="language-cpp">#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;cmath&gt;
using namespace std;

class vektor {
	public:
		int dim;
		double *v;

		// Konstruktor, erwartet Dimension als Argument
		// z.b. vektor x(3), y(5), z(3);
		//      v = new vektor(4);
		vektor(unsigned int l) {
			dim=l;
			if(l &gt; 0) 
				v = new double[l];
			else
				v = NULL;
		};

		double norm() {
			double sqnorm = 0.0;
			for (unsigned int i = 0; i &lt; dim; i++) {
				sqnorm = sqnorm + v[i]*v[i];
			}
			return sqrt(sqnorm);
		}

		vektor operator+(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] + v2.v[i];
			}
			return *newv;
		}

		vektor operator-(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] - v2.v[i];
			}
			return *newv;
		}

		// Punktprodukt vektor * vektor
		double operator*(const vektor&amp; v2) const {
	    	assert ( dim == v2.dim );
            double s= 0.0;
            for (unsigned int i = 0; i&lt;dim; i++) {
            	s= s + v[i] * v2.v[i];
            }
        	return s;
        }

		// Praedikat
		bool colinear(const vektor&amp;);

		// vektor * scalar
		vektor&amp; operator*(double scalar) {
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] * scalar;
			}
			return *newv;
		}

		// Wie indizierter Array Zugriff, schreibend und lesend
		double&amp; operator[](int index) {
			assert (index &gt;=0);
			assert (index &lt; dim);
			return v[index];
		}

		vektor&amp;
		resize(int k) {
			int i;
			vektor *newv = new vektor(k);
			for(i = 0; i &lt; fmin(this-&gt;dim, k); i++) {
				newv-&gt;v[i] = this-&gt;v[i];
			}
			for(; i &lt; k; i++) {
				newv-&gt;v[i] = 0;
			}
			return *newv;
		}
};

// output mittels iostream
// Kann keine Methode von vektor sein, weil der erste
// Operand kein vektor ist.
ostream&amp; operator&lt;&lt;(ostream&amp; left, vektor&amp; right) {
	for(unsigned int i=0; i &lt; right.dim; i++) {
		left &lt;&lt; right.v[i] &lt;&lt; &quot; &quot;;
	}
	return left;
}

int
main() {

    vektor X(3);
    X.v[1] = 3;
    X.v[2] = 2;
    X.v[3] = 4;

    vektor Y(3);
    Y.v[1] = 1;
    Y.v[2] = 2;
    Y.v[3] = 1;

    cout &lt;&lt; X.operator-(&amp;Y)&lt;&lt; endl;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>nun habe ich versucht, den minus operator aufzurufen und die beiden Vektoren zu subtrahieren.<br />
Ich weis leider echt nicht wie der Code an der Stelle</p>
<pre><code class="language-cpp">cout &lt;&lt; X.operator-(&amp;Y)&lt;&lt; endl;
</code></pre>
<p>und die ganze main Funktion aussehen muss dass zum Schluss das Ergebnis 2, 0, 3 herauskommt.<br />
Vielen Dank für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197175</guid><dc:creator><![CDATA[jeffry]]></dc:creator><pubDate>Fri, 30 Mar 2012 22:19:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse on Sat, 31 Mar 2012 00:35:02 GMT]]></title><description><![CDATA[<p>Hallo jeffry,</p>
<p>Du kannst die Signatur in</p>
<pre><code class="language-cpp">ostream&amp; operator&lt;&lt;(ostream&amp; left, const vektor&amp; right);
</code></pre>
<p>ändern.</p>
<p>Dann noch die Indizes 0,1,2 bei den Zuweisungen verwenden und<br />
du hast die Ausgabe, die du möchtest.</p>
<p>Allerdings hat dein Programm noch Memory-Leaks... Zu jedem new gehört ein delete!<br />
Außerdem solltest du den Copy-Construktor definieren, wenn du dynamisch Speicher allokierst.</p>
<p>Gruß,<br />
XSpille</p>
<p>EDIT:</p>
<p>Achso:</p>
<pre><code class="language-cpp">cout &lt;&lt; X.operator-(Y)&lt;&lt; endl;
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">cout &lt;&lt; X-Y&lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2197183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197183</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 31 Mar 2012 00:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse on Sat, 31 Mar 2012 09:35:45 GMT]]></title><description><![CDATA[<p>Hallo XSpille,<br />
vielen Dank, funktioniert perfekt.<br />
Kannst du mir vllt noch sagen, warum dsas nur mit dem const bei der Signatur funktioniert und was die Signatur genau macht.</p>
<p>Das mit den Memory Leaks hat man mir schon mal gesagt, aber das kommt vom Prof.<br />
Allerdings ist es Programmieren für Mathematiker, also nicht so streng sehen, wie bei einer Info-Vorlesung.</p>
<p>Diese Stellen sind mir auch noch nicht ganz klar.</p>
<ol>
<li></li>
</ol>
<p>hier wird der Konstruktor erzeugt, für was man den hier braucht, leuchtet mir auch nicht ganz ein, würde es auch mit einem array funktionieren?</p>
<pre><code class="language-cpp">vektor(unsigned int l) {
            dim=l;
            if(l &gt; 0)
                v = new double[l];
            else
                v = NULL;
        };
</code></pre>
<ol start="2">
<li></li>
</ol>
<p>wir haben diese methode:</p>
<pre><code class="language-cpp">vektor operator-(const vektor&amp; v2) {
            assert (dim == v2.dim);
            vektor *newv= new vektor(dim);
            for (unsigned int i = 0; i&lt;dim; i++) {
                newv-&gt;v[i] = v[i] - v2.v[i];
            }
            return *newv;
</code></pre>
<p>was wird mit dieser Stelle bezweckt?</p>
<pre><code class="language-cpp">vektor *newv= new vektor(dim);
</code></pre>
<p>wieso brauche ich hier das new -&gt; v[i]?</p>
<pre><code class="language-cpp">newv-&gt;v[i] = v[i] - v2.v[i];
</code></pre>
<p>nochmals vielen Dank für eure Hilfe.<br />
VG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197233</guid><dc:creator><![CDATA[jeffry]]></dc:creator><pubDate>Sat, 31 Mar 2012 09:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse on Sat, 31 Mar 2012 10:12:07 GMT]]></title><description><![CDATA[<p>jeffry schrieb:</p>
<blockquote>
<p>Hallo XSpille,<br />
vielen Dank, funktioniert perfekt.<br />
Kannst du mir vllt noch sagen, warum dsas nur mit dem const bei der Signatur funktioniert und was die Signatur genau macht.</p>
</blockquote>
<p>Also das const garantiert dir, dass du auf dem Objekt nur const-Funktionen machen kannst und keine verändernden Operationen auf die Klassen-Member.</p>
<p>Also es ist so, weil man nicht (versehentlich) Veränderungen auf temporären Objekten hat.<br />
<a href="http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to-a-temporary-object" rel="nofollow">http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to-a-temporary-object</a></p>
<p>Wenn du</p>
<pre><code class="language-cpp">vektor operator-(const vektor&amp; v2)
</code></pre>
<p>hast, dann ist dein Vektor nur temporär. Er wird dann meistens durch den Zuweisungsoperator oder Copy-Constructor kopiert.</p>
<p>Da dein Objekt in deinem Fall danach nicht mehr verwendbar ist, ist es quasi ein Schutz, dass du nicht etwas modifizierst, was eh keinen Effekt hat.</p>
<p>Wenn du die Signatur in<br />
ostream&amp; operator&lt;&lt;(ostream&amp; left, vektor right);<br />
ändern würdest, dann würde beim Funktionsaufruf eine Kopie erstellt und es<br />
würde (mit unnötiger Kopie) auch funktionieren.<br />
Deswegen auch der Hinweis, den Copy-Constructor und Zuweisungsoperator zu implementieren. (Insbesondere, wenn du die Memory-Leaks fixt)</p>
<p>jeffry schrieb:</p>
<blockquote>
<p>Das mit den Memory Leaks hat man mir schon mal gesagt, aber das kommt vom Prof.<br />
Allerdings ist es Programmieren für Mathematiker, also nicht so streng sehen, wie bei einer Info-Vorlesung.</p>
<p>Diese Stellen sind mir auch noch nicht ganz klar.</p>
<ol>
<li></li>
</ol>
<p>hier wird der Konstruktor erzeugt, für was man den hier braucht, leuchtet mir auch nicht ganz ein, würde es auch mit einem array funktionieren?</p>
<pre><code class="language-cpp">vektor(unsigned int l) {
            dim=l;
            if(l &gt; 0)
                v = new double[l];
            else
                v = NULL;
        };
</code></pre>
</blockquote>
<p>Jain, dann kannst du aber keine Member-Funktionen verwenden und du würdest<br />
für die (mathematischen) Operatoren freie Funktionen benötigen. Diese müssten dann Templates sein, da du anhand des Arrays nicht feststellen kannst, wie groß es ist. Deswagen wird von C++ i. d. R. auch std::vector verwendet, der quasi nicht anderes macht als ein (vergrößerbares) Array mit einigen Funktionen zur VErfügung zu stellen.</p>
<p>jeffry schrieb:</p>
<blockquote>
<ol start="2">
<li></li>
</ol>
<p>wir haben diese methode:</p>
<pre><code class="language-cpp">vektor operator-(const vektor&amp; v2) {
            assert (dim == v2.dim);
            vektor *newv= new vektor(dim);
            for (unsigned int i = 0; i&lt;dim; i++) {
                newv-&gt;v[i] = v[i] - v2.v[i];
            }
            return *newv;
</code></pre>
<p>was wird mit dieser Stelle bezweckt?</p>
<pre><code class="language-cpp">vektor *newv= new vektor(dim);
</code></pre>
</blockquote>
<p>Du erstellst ein neues Objekt auf dem Heap.</p>
<p>Ich würde es so auf dem Stack erstellen, da es eh kopiert wird,<br />
beim Verlassen der Funktion.</p>
<pre><code class="language-cpp">vektor operator-(const vektor&amp; v2) {
            assert (dim == v2.dim);
            vektor newv(dim);
            for (unsigned int i = 0; i&lt;dim; i++) {
                newv.v[i] = v[i] - v2.v[i];
            }
            return newv;
}
</code></pre>
<p>jeffry schrieb:</p>
<blockquote>
<p>wieso brauche ich hier das new -&gt; v[i]?</p>
<pre><code class="language-cpp">newv-&gt;v[i] = v[i] - v2.v[i];
</code></pre>
</blockquote>
<p>weil du einen Zeiger auf ein Objekt hast.</p>
<p>jeffry schrieb:</p>
<blockquote>
<p>nochmals vielen Dank für eure Hilfe.<br />
VG</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2197241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197241</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sat, 31 Mar 2012 10:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse on Sat, 31 Mar 2012 12:55:44 GMT]]></title><description><![CDATA[<p>Super, versteh ich!</p>
<pre><code class="language-cpp">vektor operator-(const vektor&amp; v2) {
            assert (dim == v2.dim);
            vektor newv(dim);
            for (unsigned int i = 0; i&lt;dim; i++) {
                newv.v[i] = v[i] - v2.v[i];
            }
            return newv;
}
</code></pre>
<p>das ist mir viel logischer!</p>
<p>Ich hoffe ich nerve nicht, aber ich hätte nochmal eine Frage:<br />
WIr haben folgende Aufgabe zum Üben für die Klausur bekommen.</p>
<pre><code class="language-cpp">#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;cmath&gt;
using namespace std;

class vektor {
	public:
		int dim;
		double *v;

		// Konstruktor, erwartet Dimension als Argument
		// z.b. vektor x(3), y(5), z(3);
		//      v = new vektor(4);
		vektor(unsigned int l) {
			dim=l;
			if(l &gt; 0) 
				v = new double[l];
			else
				v = NULL;
		};

		double norm() {
			double sqnorm = 0.0;
			for (unsigned int i = 0; i &lt; dim; i++) {
				sqnorm = sqnorm + v[i]*v[i];
			}
			return sqrt(sqnorm);
		}

		vektor operator+(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] + v2.v[i];
			}
			return *newv;
		}

		vektor operator-(const vektor&amp; v2) {
			assert (dim == v2.dim);
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] - v2.v[i];
			}
			return *newv;
		}

		// Punktprodukt vektor * vektor
		double operator*(const vektor&amp; v2) const {
	    	assert ( dim == v2.dim );
            double s= 0.0;
            for (unsigned int i = 0; i&lt;dim; i++) {
            	s= s + v[i] * v2.v[i];
            }
        	return s;
        }

		// Praedikat
		bool colinear(const vektor&amp;);

		// vektor * scalar
		vektor&amp; operator*(double scalar) {
			vektor *newv= new vektor(dim);
			for (unsigned int i = 0; i&lt;dim; i++) {
				newv-&gt;v[i] = v[i] * scalar;
			}
			return *newv;
		}

		// Wie indizierter Array Zugriff, schreibend und lesend
		double&amp; operator[](int index) {
			assert (index &gt;=0);
			assert (index &lt; dim);
			return v[index];
		}

		vektor&amp;
		resize(int k) {
			int i;
			vektor *newv = new vektor(k);
			for(i = 0; i &lt; fmin(this-&gt;dim, k); i++) {
				newv-&gt;v[i] = this-&gt;v[i];
			}
			for(; i &lt; k; i++) {
				newv-&gt;v[i] = 0;
			}
			return *newv;
		}
};

// scalar * vektor
// Kann keine Methode von vektor sein, weil der erste
// Operand kein vektor ist.
vektor operator*(const double scalar, const vektor&amp; v) {
//	vektor v2 = v;
	return (v * scalar);
}

// output mittels iostream
// Kann keine Methode von vektor sein, weil der erste
// Operand kein vektor ist.
ostream&amp; operator&lt;&lt;(ostream&amp; left, vektor&amp; right) {
	for(unsigned int i=0; i &lt; right.dim; i++) {
		left &lt;&lt; right.v[i] &lt;&lt; &quot; &quot;;
	}
	return left;
}

class matrix {
	public:
		unsigned int dim[2]; // [zeilen,spalten]
		double **m;

		matrix();
		matrix(unsigned int zeilen, unsigned int spalten) {
			dim[0] = zeilen;
			dim[1] = spalten;
			m = new double*[zeilen];
			for(unsigned int i = 0; i &lt; zeilen; i++) {
				m[i] = new double[spalten];
			}
		};

		matrix transp(){
			matrix *newm = new matrix (dim[1], dim [0]); 
			for (unsigned int i=0; i&lt;dim[1]; i++){
				for (unsigned int j=0; j&lt;dim[0];j++) {
					newm-&gt;m[i][j]= m[j][i];
				}
			}
			return *newm;
		}

		double det();
		double spur() {
			assert(dim[0] == dim[1]);
			double sum = 0.0;
			for (unsigned int i = 0; i &lt; dim[0]; i++) {
				sum = sum + this-&gt;m[i][i];
			}
			return sum;
		}

		// Matrix + Matrix
		matrix operator+(const matrix&amp; r) {
			assert(r.dim[0] == dim[0] &amp;&amp; r.dim[1] == dim[1]);
			matrix *newm = new matrix(dim[0], dim[1]);
			for (unsigned int i = 0; i &lt; dim[0]; i++) {
				for (unsigned int j = 0; j &lt; dim[1]; j++) {
					newm-&gt;m[i][j] = m[i][j] + r.m[i][j];
				}
			}
			return *newm;
		}

		matrix operator-(const matrix&amp; r){
			assert(r.dim[0] == dim[0] &amp;&amp; r.dim[1] == dim[1]);
			matrix *newm = new matrix(dim[0], dim[1]);
			for (unsigned int i = 0; i &lt; dim[0]; i++) {
				for (unsigned int j = 0; j &lt; dim[1]; j++) {
					newm-&gt;m[i][j] = m[i][j] - r.m[i][j];
				}
			}
			return *newm;
		}
		matrix operator*(const matrix&amp;);
		matrix operator*(const double d) {
			matrix *newm = new matrix(dim[0], dim[1]);
			for (unsigned int i = 0; i &lt; dim[0]; i++) {
				for (unsigned int j = 0; j &lt; dim[1]; j++) {
					newm-&gt;m[i][j] = d * this-&gt;m[i][j];
				}
			}
			return *newm;
		}
		vektor operator*(const vektor&amp; v2) {
			assert (v2.dim==dim[1]);
			vektor *newv = new vektor(dim[0]);
			for (unsigned int i=0; i&lt;dim[0]; i++) {
				newv-&gt;v[i] = (this-&gt;zeile(i+1)) * v2;
			}
			return *newv;
		}

		// Liefert eine Zeile als Vektor
		vektor zeile(unsigned int nr) {
			assert(nr &lt;= dim[0]);
			vektor *z = new vektor(dim[1]);
			for (unsigned int i = 0; i &lt; dim[1]; i++){
				z-&gt;v[i] = m[nr - 1][i];
			}
			return *z;
		}
		vektor spalte(unsigned int nr) {
                 assert(nr&lt;= dim[1]);
                        vektor *r = new vektor (dim[0]);
                        for(unsigned int i=0; i&lt;dim [0]; i++) {
                                r-&gt;v[i]=m[i][nr-1];
                        }
                        return *r;
        }

		bool istOrthogonal() {
			// Ihr Code hier:
			// 1. Check, dass die matrix quadatisch ist
			// 2. Rauskriegen, ob die Matrix orthogonal ist
			// 3. true oder false zurueckgeben
		}
};

int
main(int argc, char **argv) {

matrix X(2,2);
	X.m[0][0]= 1;
	X.m[1][0]= 2;
	X.m[2][0]= 3;
	X.m[0][1]= 4;
	X.m[1][1]= 5;
	X.m[2][1]= 6;
	X.m[0][2]= 7;
	X.m[1][2]= 8;
	X.m[2][2]= 9;
	cout &lt;&lt; X.istOrthogonal() &lt;&lt; endl;
	cout &lt;&lt; X.spur() &lt;&lt; endl;
}
</code></pre>
<p>soweit alles klar.<br />
nun war mein erster Gedanke erstmal das ganze zu testen un den matrix operator+ aufzurufen</p>
<pre><code class="language-cpp">cout&lt;&lt;X.operator(X)&lt;&lt;endl;
</code></pre>
<p>und er bringt mir eine Fehlermeldung. Ist an der Methode</p>
<pre><code class="language-cpp">matrix operator+(const matrix&amp; r) {
			assert(r.dim[0] == dim[0] &amp;&amp; r.dim[1] == dim[1]);
			matrix *newm = new matrix(dim[0], dim[1]);
			for (unsigned int i = 0; i &lt; dim[0]; i++) {
				for (unsigned int j = 0; j &lt; dim[1]; j++) {
					newm-&gt;m[i][j] = m[i][j] + r.m[i][j];
				}
			}
			return *newm;
		}
</code></pre>
<p>etwas falsch?</p>
<p>das gleiche bringt er bei transp();</p>
<p>wie man dann die eigentliche Aufgabe löst und auf orthogonalität prüft, glaube ich, weis ich dann.</p>
<p>Vielen Dank für Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197306</guid><dc:creator><![CDATA[jeffry]]></dc:creator><pubDate>Sat, 31 Mar 2012 12:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse on Sat, 31 Mar 2012 14:56:09 GMT]]></title><description><![CDATA[<p>viel zu viel <code>*</code><br />
viel zu viel <code>new</code><br />
viel zu viele Speicherlecks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2197342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2197342</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 31 Mar 2012 14:56:09 GMT</pubDate></item></channel></rss>