<?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[Vektor Klasse selbst geschrieben...]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab eine klasse Vektor geschrieben, die aber irgendwie nicht richtig funktioniert. ich möchte, dass man mit auf die Vektorelemente mit [] zugreifen kann. Also: Vektor v = new Vektor(2); v[1]=2; (siehe main unten)</p>
<pre><code>class Vektor{
private: 
	int rows;
	string name;
	void init();
	double* values;

public:
	Vektor(int rows);
	string getName();
	void setName(string name);
	int getRows();
	double&amp; operator[] (int row);
	Vektor operator* (Vektor V);

};

Vektor::Vektor(int rows){
	this-&gt;rows=rows;
	this-&gt;values=new double[rows];
	this-&gt;init();
}

double&amp; Vektor::operator[] (int row){
	if(row&lt;0 || row &gt; this-&gt;rows) exit(1);
	else return this-&gt;values[row];
}

void Vektor::init(){
	for(int i=0; i&lt;rows; i++){
		this-&gt;values[i]=0;
	}
}

int main(void){

	Vektor * v=new Vektor(3);
	v[2]=34;
	cout &lt;&lt; v[2];
	return 0;
}
</code></pre>
<p>ich bekomme die fehlermeldung des compilers, dass v[2] ein vektor. ich frag mich nur warum das so ist, denn v[2] sollte eigentlich ein double sein. jemand eine ahnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175466/vektor-klasse-selbst-geschrieben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 04:00:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175466.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 10 Mar 2007 19:37:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 19:37:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab eine klasse Vektor geschrieben, die aber irgendwie nicht richtig funktioniert. ich möchte, dass man mit auf die Vektorelemente mit [] zugreifen kann. Also: Vektor v = new Vektor(2); v[1]=2; (siehe main unten)</p>
<pre><code>class Vektor{
private: 
	int rows;
	string name;
	void init();
	double* values;

public:
	Vektor(int rows);
	string getName();
	void setName(string name);
	int getRows();
	double&amp; operator[] (int row);
	Vektor operator* (Vektor V);

};

Vektor::Vektor(int rows){
	this-&gt;rows=rows;
	this-&gt;values=new double[rows];
	this-&gt;init();
}

double&amp; Vektor::operator[] (int row){
	if(row&lt;0 || row &gt; this-&gt;rows) exit(1);
	else return this-&gt;values[row];
}

void Vektor::init(){
	for(int i=0; i&lt;rows; i++){
		this-&gt;values[i]=0;
	}
}

int main(void){

	Vektor * v=new Vektor(3);
	v[2]=34;
	cout &lt;&lt; v[2];
	return 0;
}
</code></pre>
<p>ich bekomme die fehlermeldung des compilers, dass v[2] ein vektor. ich frag mich nur warum das so ist, denn v[2] sollte eigentlich ein double sein. jemand eine ahnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243068</guid><dc:creator><![CDATA[Damian]]></dc:creator><pubDate>Sat, 10 Mar 2007 19:37:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 19:49:13 GMT]]></title><description><![CDATA[<p>...v ist ein Pointer. Schreib</p>
<pre><code class="language-cpp">Vektor v(3);
</code></pre>
<p>Im Übrigen leckt deine Vektorklasse Speicher, du solltest das, was du mit new[] angelegt hast, im Destruktor wieder delete[]n.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243078</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 10 Mar 2007 19:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 20:23:07 GMT]]></title><description><![CDATA[<p>naja, das wollte ich ja grade nicht, weil ich dynamisch also während der Laufzeit den Vektor erstellen werde und die größe noch nicht feststeht... deshalb wollte ich schon mit Vektor *v = new Vektor(3) arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243091</guid><dc:creator><![CDATA[Damian]]></dc:creator><pubDate>Sat, 10 Mar 2007 20:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 21:19:52 GMT]]></title><description><![CDATA[<p>Du kannst dem Konstruktor locker ne Variable übergeben:</p>
<pre><code class="language-cpp">int x;

std::cout &lt;&lt; &quot;Zahl: &quot; &lt;&lt; std::flush;
std::cin &gt;&gt; x;

Vektor v(x);
</code></pre>
<p>...gar kein Problem. Ansonsten, wenns unbedingt auf den Heap soll, dann musst du später den Zeiger dereferenzieren, bevor du den Operator benutzt, also</p>
<pre><code class="language-cpp">(*v)[2] = 34;
</code></pre>
<p>...und vergiss dann nicht, den Vektor nachher wieder zu deleten, sonst kriegst du Speicherlecks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243115</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 10 Mar 2007 21:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 22:15:08 GMT]]></title><description><![CDATA[<p>Ok, danke erstmal für deine Hilfe!</p>
<pre><code>class A{

public:
    Vektor v;
    A(int size);
};

A::A(int size){
    v(size);
}
</code></pre>
<p>der code spiegelt vielleicht mein problem besser wieder...<br />
A soll einen Vektor v haben, dessen größe jedoch erst während der Laufzeit bekannt wird... so funktioniert das aber leider nicht.</p>
<p>ich weiß, dass folgende Lösung funktioniert:</p>
<pre><code>A::A(int size):v(size){
}
</code></pre>
<p>aber das kanns ja nicht sein... in meinem programm hätte ich dann hinter dem doppelpunkt ne menge objekte stehen, die alle während der laufzeit initialisiert werden.</p>
<p>Gibts hier ne elegantere Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243137</guid><dc:creator><![CDATA[Damian]]></dc:creator><pubDate>Sat, 10 Mar 2007 22:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sat, 10 Mar 2007 22:21:37 GMT]]></title><description><![CDATA[<p>mach nen default c-tor in deine vector klasse der die size mit 0 initialisiert und den ptr fuer daten auf 0 stellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243139</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Sat, 10 Mar 2007 22:21:37 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sun, 11 Mar 2007 00:11:57 GMT]]></title><description><![CDATA[<p>Ok, das haut hin. Danke für den Tip.</p>
<p>Das ganze ist aber dann doch noch nicht gegessen, weil ich im Grunde folgendes habe:</p>
<pre><code>/*Klasse Vektor*/
class Vektor{
private: 
	int rows;
	string name;
	void init();
	double* values;

public:
	Vektor(string name, int rows);
	Vektor();
        ~Vektor();
	string getName();
	void setName(string name);
	int getRows();
	double&amp; operator[] (int row);
};

/*Klasse Matrix*/
class Matrix{

private:
	Vektor *matrix;
	void init();
	int columns;
	int rows;

public:
	Matrix();
        ~Matrix();
	Matrix(int columns, int rows);
	Vektor&amp; operator[](int column);
	int getrows();
	int getcolumns();
};

/*Implementierung Vektor*/
Vektor::Vektor(string name, int rows){
	this-&gt;rows=rows;
	this-&gt;name=name;
	this-&gt;values=new double[rows];
	this-&gt;init();
}

Vektor::Vektor(){
	this-&gt;rows=0;
	this-&gt;values=0;
	this-&gt;name=&quot;&quot;;
}

double&amp; Vektor::operator[] (int row){
	if(row&lt;0 || row &gt; this-&gt;rows) exit(1);
	else return this-&gt;values[row];
}

/*Implementierung Matrix*/
Matrix::Matrix(int columns, int rows){
	this-&gt;columns=columns;
	this-&gt;rows=rows;
	this-&gt;init();
	matrix=new Vektor[columns];
}

Vektor&amp; Matrix::operator[](int column){
	if(column&lt;0 || column &gt; (this-&gt;columns-1)) exit(1);
	else return (*this)[column];
}

void Matrix::init(){
	for(int i=0; i&lt;columns; i++){
		for(int j=0; j&lt;rows; j++){
			matrix[i][j]=0;
                        //matrix[i]=Vektor(rows);

		}
	}
}
</code></pre>
<p>Naja, ich hab also eine Matrix, die sich aus Spaltenvektoren zusammensetzt... mit matrix[i][j] möchte ich dann auf die double werte zurückgreifen und mit matrix[i] auf den spaltenvektor. das funktioniert aber alles nicht so, wie ich mir das vorgestellt habe... Matrix::init() soll einfach nur die Matrix mit Nullen füllen, macht sie aber nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243159</guid><dc:creator><![CDATA[Damian]]></dc:creator><pubDate>Sun, 11 Mar 2007 00:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sun, 11 Mar 2007 05:24:58 GMT]]></title><description><![CDATA[<p>Öh, aber genau dafür ist die Initialisierungsliste ja da. Ich seh auch nicht, wie</p>
<pre><code class="language-cpp">A::A(int a, int b, int c)
 : a_(a),
   b_(b),
   c_(c)
{
  // ...
}
</code></pre>
<p>schlimmer ist als</p>
<pre><code class="language-cpp">A::A(int a, int b, int c) {
  a_ = a;
  b_ = b;
  c_ = c;
}
</code></pre>
<p>Davon ganz abgesehen sparst du dir damit im Vergleich zum Anlegen auf dem Heap nachher im Destruktor ein delete, also wird dein Code noch kürzer. Wo ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243182</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 11 Mar 2007 05:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor Klasse selbst geschrieben... on Sun, 11 Mar 2007 05:35:03 GMT]]></title><description><![CDATA[<p>Ansonsten, schreib halt ne expand-Funktion oder so.</p>
<pre><code class="language-cpp">class Vektor {
// ...
public:
  // ...
  void expand(std::size_t new_size);
}

// Für std::copy und std::fill #include &lt;algorithm&gt;

void Vektor::expand(std::size_t new_size) {
  std::size_t old_size = rows;

  if(new_size &lt;= old_size)
    return;

  double *old = values;
  values = new double[new_size];

  std::copy(old, old + old_size, values);
  std::fill(values + old_size, values + new_size, 0.0);

  rows = new_size;
  delete[] old;
}

// ...

Matrix::Matrix(std::size_t columns, std::size_t rows)
  : columns(columns),
    rows   (rows)
{
  Matrix = new Vektor[columns];
  for(int i = 0; i &lt; columns; ++i)
    Matrix[i].expand(rows);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1243183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243183</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 11 Mar 2007 05:35:03 GMT</pubDate></item></channel></rss>