<?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 mit this Zeiger]]></title><description><![CDATA[<p>Hi ich hab ein Verständnissproblem mit dem this Zeiger,</p>
<p>und zwar genauer gesagt warum er beim Aufruf der Funktion</p>
<p>Matrix Matrix::testfu() das aufrufende Objekt verändert.</p>
<p>Sprich ein Objekt vom Typ Matrix ruft testfu auf (siehe Main),</p>
<p>und wird verändert, ohne das ich da meines wissens eine zuweisung mache.</p>
<p>Header 1:</p>
<pre><code class="language-cpp">#ifndef mymatrix_h
#define mymatrix_h
#include&lt;mycomplex.h&gt;

using namespace std;

class matrix{
       complex **element;
       unsigned int rows ,columns;

public:

matrix(int n,int m,char type){

       element = (complex **) malloc(n*sizeof(complex *));
       for (int ii = 0; ii &lt;n; ii++)element[ii] = (complex*) malloc(m *sizeof(complex));

       rows =n;
       columns=m;

       switch (type){

       case 'c'://type in matrix or vector

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       cout&lt;&lt;&quot;enter data&quot;&lt;&lt;&quot;[&quot;&lt;&lt;ii&lt;&lt;&quot;]&quot;&lt;&lt;&quot;[&quot;&lt;&lt;jj&lt;&lt;&quot;]: realpart :&quot;;
       cin&gt;&gt;element[ii][jj].data[0];
       cout&lt;&lt;&quot;enter data&quot;&lt;&lt;&quot;[&quot;&lt;&lt;ii&lt;&lt;&quot;]&quot;&lt;&lt;&quot;[&quot;&lt;&lt;jj&lt;&lt;&quot;]: imagpart :&quot;;
       cin&gt;&gt;element[ii][jj].data[1];
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                                         }//for jj
       cout&lt;&lt;endl;
                                         }//for ii       
       break;

       case 'r'://random matrix or vector

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=rand()%2;
       element[ii][jj].data[1]=rand()%2; 
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                                 }//for jj 
                                 }//for ii                                 
       break;

       case 'i'://identity matrix

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       if(jj==ii){element[ii][jj].data[0]=1;element[ii][jj].data[1]=0;}
       else{element[ii][jj].data[0]=0;element[ii][jj].data[1]=0;}
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');             
                              }//for jj 
                                 }//for ii                                 
       break;

       case '0'://zero matrix

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=0;
       element[ii][jj].data[1]=0;
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                              }//for jj 
                                 }//for ii                                 
       break;

       case '1':// ones

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=1;
       element[ii][jj].data[1]=1;
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');  
                              }//for jj 
                                 }//for ii                                 
       break;

       default:cout&lt;&lt;&quot;choosen constr. type does not exist&quot;&lt;&lt;endl;

                 }//switch i       
}//::matrix(int,int,1)

~matrix(){}//destruktor

matrix matrix::operator*(matrix b){
       matrix c(rows,b.columns,'0');

       if(columns==b.rows){//if1
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;b.columns;jj++){
       for(int kk=0;kk&lt;columns;kk++){
       c.element[ii][jj]=c.element[ii][jj]+element[ii][kk]*b.element[kk][jj];                  
                                  }//for kk                           
                                  }//for jj 
                                  }//for ii
                          }//if1
       else{  cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}//Katastrophe
       return c;  

}//::operator*

matrix matrix::operator+(matrix b){
       matrix c(rows,columns,'0');

       if((columns==b.columns)&amp;&amp;(rows==b.rows)){//if
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]+b.element[ii][jj];                 
                                  }//for jj 
                                  }//for ii            
                                               }//if1
       else{cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}

       return c;
}//::operator+

matrix matrix::operator-(matrix b){
       matrix c(rows,columns,'0');

       if((columns==b.columns)&amp;&amp;(rows==b.rows)){//if1
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]-b.element[ii][jj];                 
                                  }//for jj 
                                  }//for ii                      
                                                }//if1

       else{cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}//katastrophe

       return c;
}//::operator-

matrix matrix::operator/(complex d){
       matrix c(rows, columns,'0');

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]/d;
                                  }//for jj 
                                  }//for ii
       return c;
}//::operator/

matrix matrix::operator~(){
       matrix c(columns, rows,'0');

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[jj][ii]=element[ii][jj];
                                  }//for jj 
                                  }//for ii      
       return c;
}// operator~ =&gt;transpose

matrix matrix::operator()(int lowerr,int upperr,int lowerc,int upperc){

       if((upperr-lowerr)&lt;0||(upperc-lowerc)&lt;0||lowerr&lt;=0||lowerc&lt;=0||
       (upperr-lowerr+1)&gt;rows||(upperc-lowerc+1)&gt;columns){cout&lt;&lt;&quot;value error&quot;&lt;&lt;endl;return matrix(1,1,'0');}//if
       else{
       lowerc=lowerc-1;
       upperc=upperc-1;
       lowerr=lowerr-1;
       upperr=upperr-1;

       matrix c(upperr-lowerr+1,upperc-lowerc+1,'0');

       for(int ii=lowerr;ii&lt;=upperr;ii++){
       for(int jj=lowerc;jj&lt;=upperc;jj++){
       c.element[ii-lowerr][jj-lowerc]=element[ii][jj];                                 
                                       }//for jj
                                       }//for ii       
       return c;
            }//else
}//operator()

void matrix::tellme(char *type){

     switch (*type){

     case 'a':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;&quot;element:  &quot;&lt;&lt;ii&lt;&lt;&quot;    &quot;&lt;&lt;jj&lt;&lt;endl;
     element[ii][jj].tellme();         
                                }//for jj 
                                }//for ii
     break;

     case 'r':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;element[ii][jj].data[0]&lt;&lt;&quot;  &quot;;                                
                                }//for jj 
     cout&lt;&lt;endl;
                                 }//for ii
     break;

     case 'i':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;element[ii][jj].data[1]&lt;&lt;&quot;  &quot;;                                    
                                }//for jj 
     cout&lt;&lt;endl;
                                 }//for ii
     break;

     default: cout&lt;&lt;&quot;type wrong&quot;&lt;&lt;endl;break;
     }//switch type
}//tellme

matrix matrix::testfu() const{
        matrix c= *this;

       for(int ii=0;ii&lt;rows;ii++){
       c.element[ii][0]=complex(0,0,'p');

       }//for ii

      return c;

}//testfu

};//class matrix

#endif
</code></pre>
<p>main:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&quot;mymatrix.h&quot;
#include&lt;time.h&gt;

using namespace std;

int main(){
    time_t t;
    time(&amp;t);
    srand((unsigned int)t);

   matrix a(2,2,'r');
   a.tellme(&quot;r&quot;);
   a.testfu();
   a.tellme(&quot;r&quot;);

system(&quot;PAUSE&quot;);
}
</code></pre>
<p>header 2:</p>
<pre><code class="language-cpp">#ifndef mycomplex_h
#define mycomplex_h
#include &lt;math.h&gt;
using namespace std;
class complex{

public: 
float data[4];
complex(float a,float b,char type){

       switch(type){

       case 'p':
       (b&lt;0)?b=b*-1:b=b;
       (sqrt(b*b)&lt;=.1)?b=a=0:b=b;

       data[2]=a;
       data[3]=sqrt(b*b);

       data[0]=b*cos(a);
       data[1]=b*sin(a);
       break;

       case 'r':

       (sqrt(a*a)&lt;=.1)?a=0:a=a;
       (sqrt(b*b)&lt;=.1)?b=0:b=b;

       data[0]=a;
       data[1]=b;

       data[3]=sqrt(a*a+b*b);

       if(a==0){
       if(a==0&amp;&amp;b==0){data[2]=0;}
       else{data[2]=(b/sqrt(b*b))*1.5707;}
               }//if(a==0)
       else{

       data[2]=atan(b/a);

       if(a&lt;0&amp;&amp;b&lt;=0){data[2]=data[2]+3.1415;}
       if(a&lt;0&amp;&amp;b&gt;=0){data[2]=3.1415+data[2];}
       if(a&gt;0&amp;&amp;b&lt;=0){data[2]=data[2];}
       if(a&lt;0&amp;&amp;b==0){data[2]=3.1415;}

           }//else
       break;

       default:
       cout&lt;&lt;&quot;type not known&quot;&lt;&lt;endl;

     }//switch type

}//konstruktor

void complex::tellme(){

     cout&lt;&lt;endl&lt;&lt;&quot;realpart: &quot;&lt;&lt;data[0]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;imagpart: &quot;&lt;&lt;data[1]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;Phase: &quot;
     &lt;&lt;data[2]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;Abs: &quot;&lt;&lt;data[3]&lt;&lt;endl&lt;&lt;endl;
}//tellme

complex complex::operator+(complex b){

        complex c(data[0]+b.data[0],data[1]+b.data[1],'r');
        return c;
}//operator+

complex complex::operator-(complex b){

        complex c(data[0]-b.data[0],data[1]-b.data[1],'r');
        return c;
}//operator-

complex complex::operator*(complex b){

        complex c(data[2]+b.data[2],data[3]*b.data[3],'p');
        return c;
}//operator*

complex complex::operator/(complex b){

        complex c(data[2]-b.data[2],data[3]/b.data[3],'p');
        return c;

}//operator/

complex complex::operator~(){
        complex c(data[0],data[1]*-1,'r');
        return c;
}//operator~ :conjungate

};//class complex

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/290712/probleme-mit-this-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 10:01:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290712.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Aug 2011 20:24:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit this Zeiger on Mon, 01 Aug 2011 20:24:08 GMT]]></title><description><![CDATA[<p>Hi ich hab ein Verständnissproblem mit dem this Zeiger,</p>
<p>und zwar genauer gesagt warum er beim Aufruf der Funktion</p>
<p>Matrix Matrix::testfu() das aufrufende Objekt verändert.</p>
<p>Sprich ein Objekt vom Typ Matrix ruft testfu auf (siehe Main),</p>
<p>und wird verändert, ohne das ich da meines wissens eine zuweisung mache.</p>
<p>Header 1:</p>
<pre><code class="language-cpp">#ifndef mymatrix_h
#define mymatrix_h
#include&lt;mycomplex.h&gt;

using namespace std;

class matrix{
       complex **element;
       unsigned int rows ,columns;

public:

matrix(int n,int m,char type){

       element = (complex **) malloc(n*sizeof(complex *));
       for (int ii = 0; ii &lt;n; ii++)element[ii] = (complex*) malloc(m *sizeof(complex));

       rows =n;
       columns=m;

       switch (type){

       case 'c'://type in matrix or vector

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       cout&lt;&lt;&quot;enter data&quot;&lt;&lt;&quot;[&quot;&lt;&lt;ii&lt;&lt;&quot;]&quot;&lt;&lt;&quot;[&quot;&lt;&lt;jj&lt;&lt;&quot;]: realpart :&quot;;
       cin&gt;&gt;element[ii][jj].data[0];
       cout&lt;&lt;&quot;enter data&quot;&lt;&lt;&quot;[&quot;&lt;&lt;ii&lt;&lt;&quot;]&quot;&lt;&lt;&quot;[&quot;&lt;&lt;jj&lt;&lt;&quot;]: imagpart :&quot;;
       cin&gt;&gt;element[ii][jj].data[1];
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                                         }//for jj
       cout&lt;&lt;endl;
                                         }//for ii       
       break;

       case 'r'://random matrix or vector

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=rand()%2;
       element[ii][jj].data[1]=rand()%2; 
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                                 }//for jj 
                                 }//for ii                                 
       break;

       case 'i'://identity matrix

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       if(jj==ii){element[ii][jj].data[0]=1;element[ii][jj].data[1]=0;}
       else{element[ii][jj].data[0]=0;element[ii][jj].data[1]=0;}
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');             
                              }//for jj 
                                 }//for ii                                 
       break;

       case '0'://zero matrix

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=0;
       element[ii][jj].data[1]=0;
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');
                              }//for jj 
                                 }//for ii                                 
       break;

       case '1':// ones

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       element[ii][jj].data[0]=1;
       element[ii][jj].data[1]=1;
       element[ii][jj]=complex(element[ii][jj].data[0],element[ii][jj].data[1],'r');  
                              }//for jj 
                                 }//for ii                                 
       break;

       default:cout&lt;&lt;&quot;choosen constr. type does not exist&quot;&lt;&lt;endl;

                 }//switch i       
}//::matrix(int,int,1)

~matrix(){}//destruktor

matrix matrix::operator*(matrix b){
       matrix c(rows,b.columns,'0');

       if(columns==b.rows){//if1
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;b.columns;jj++){
       for(int kk=0;kk&lt;columns;kk++){
       c.element[ii][jj]=c.element[ii][jj]+element[ii][kk]*b.element[kk][jj];                  
                                  }//for kk                           
                                  }//for jj 
                                  }//for ii
                          }//if1
       else{  cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}//Katastrophe
       return c;  

}//::operator*

matrix matrix::operator+(matrix b){
       matrix c(rows,columns,'0');

       if((columns==b.columns)&amp;&amp;(rows==b.rows)){//if
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]+b.element[ii][jj];                 
                                  }//for jj 
                                  }//for ii            
                                               }//if1
       else{cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}

       return c;
}//::operator+

matrix matrix::operator-(matrix b){
       matrix c(rows,columns,'0');

       if((columns==b.columns)&amp;&amp;(rows==b.rows)){//if1
       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]-b.element[ii][jj];                 
                                  }//for jj 
                                  }//for ii                      
                                                }//if1

       else{cout&lt;&lt;&quot;matrix dimensions do not match&quot;&lt;&lt;endl;}//katastrophe

       return c;
}//::operator-

matrix matrix::operator/(complex d){
       matrix c(rows, columns,'0');

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[ii][jj]=element[ii][jj]/d;
                                  }//for jj 
                                  }//for ii
       return c;
}//::operator/

matrix matrix::operator~(){
       matrix c(columns, rows,'0');

       for(int ii=0;ii&lt;rows;ii++){
       for(int jj=0;jj&lt;columns;jj++){
       c.element[jj][ii]=element[ii][jj];
                                  }//for jj 
                                  }//for ii      
       return c;
}// operator~ =&gt;transpose

matrix matrix::operator()(int lowerr,int upperr,int lowerc,int upperc){

       if((upperr-lowerr)&lt;0||(upperc-lowerc)&lt;0||lowerr&lt;=0||lowerc&lt;=0||
       (upperr-lowerr+1)&gt;rows||(upperc-lowerc+1)&gt;columns){cout&lt;&lt;&quot;value error&quot;&lt;&lt;endl;return matrix(1,1,'0');}//if
       else{
       lowerc=lowerc-1;
       upperc=upperc-1;
       lowerr=lowerr-1;
       upperr=upperr-1;

       matrix c(upperr-lowerr+1,upperc-lowerc+1,'0');

       for(int ii=lowerr;ii&lt;=upperr;ii++){
       for(int jj=lowerc;jj&lt;=upperc;jj++){
       c.element[ii-lowerr][jj-lowerc]=element[ii][jj];                                 
                                       }//for jj
                                       }//for ii       
       return c;
            }//else
}//operator()

void matrix::tellme(char *type){

     switch (*type){

     case 'a':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;&quot;element:  &quot;&lt;&lt;ii&lt;&lt;&quot;    &quot;&lt;&lt;jj&lt;&lt;endl;
     element[ii][jj].tellme();         
                                }//for jj 
                                }//for ii
     break;

     case 'r':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;element[ii][jj].data[0]&lt;&lt;&quot;  &quot;;                                
                                }//for jj 
     cout&lt;&lt;endl;
                                 }//for ii
     break;

     case 'i':

     cout&lt;&lt;&quot;dims:&quot;&lt;&lt;endl&lt;&lt;&quot;rows:  &quot;&lt;&lt;rows&lt;&lt;&quot;    columns:  &quot;&lt;&lt;columns&lt;&lt;endl;
     cout&lt;&lt;&quot;data :&quot;&lt;&lt;endl;
     for(int ii=0;ii&lt;rows;ii++){
     for(int jj=0;jj&lt;columns;jj++){
     cout&lt;&lt;element[ii][jj].data[1]&lt;&lt;&quot;  &quot;;                                    
                                }//for jj 
     cout&lt;&lt;endl;
                                 }//for ii
     break;

     default: cout&lt;&lt;&quot;type wrong&quot;&lt;&lt;endl;break;
     }//switch type
}//tellme

matrix matrix::testfu() const{
        matrix c= *this;

       for(int ii=0;ii&lt;rows;ii++){
       c.element[ii][0]=complex(0,0,'p');

       }//for ii

      return c;

}//testfu

};//class matrix

#endif
</code></pre>
<p>main:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&quot;mymatrix.h&quot;
#include&lt;time.h&gt;

using namespace std;

int main(){
    time_t t;
    time(&amp;t);
    srand((unsigned int)t);

   matrix a(2,2,'r');
   a.tellme(&quot;r&quot;);
   a.testfu();
   a.tellme(&quot;r&quot;);

system(&quot;PAUSE&quot;);
}
</code></pre>
<p>header 2:</p>
<pre><code class="language-cpp">#ifndef mycomplex_h
#define mycomplex_h
#include &lt;math.h&gt;
using namespace std;
class complex{

public: 
float data[4];
complex(float a,float b,char type){

       switch(type){

       case 'p':
       (b&lt;0)?b=b*-1:b=b;
       (sqrt(b*b)&lt;=.1)?b=a=0:b=b;

       data[2]=a;
       data[3]=sqrt(b*b);

       data[0]=b*cos(a);
       data[1]=b*sin(a);
       break;

       case 'r':

       (sqrt(a*a)&lt;=.1)?a=0:a=a;
       (sqrt(b*b)&lt;=.1)?b=0:b=b;

       data[0]=a;
       data[1]=b;

       data[3]=sqrt(a*a+b*b);

       if(a==0){
       if(a==0&amp;&amp;b==0){data[2]=0;}
       else{data[2]=(b/sqrt(b*b))*1.5707;}
               }//if(a==0)
       else{

       data[2]=atan(b/a);

       if(a&lt;0&amp;&amp;b&lt;=0){data[2]=data[2]+3.1415;}
       if(a&lt;0&amp;&amp;b&gt;=0){data[2]=3.1415+data[2];}
       if(a&gt;0&amp;&amp;b&lt;=0){data[2]=data[2];}
       if(a&lt;0&amp;&amp;b==0){data[2]=3.1415;}

           }//else
       break;

       default:
       cout&lt;&lt;&quot;type not known&quot;&lt;&lt;endl;

     }//switch type

}//konstruktor

void complex::tellme(){

     cout&lt;&lt;endl&lt;&lt;&quot;realpart: &quot;&lt;&lt;data[0]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;imagpart: &quot;&lt;&lt;data[1]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;Phase: &quot;
     &lt;&lt;data[2]&lt;&lt;&quot;  &quot;&lt;&lt;&quot;Abs: &quot;&lt;&lt;data[3]&lt;&lt;endl&lt;&lt;endl;
}//tellme

complex complex::operator+(complex b){

        complex c(data[0]+b.data[0],data[1]+b.data[1],'r');
        return c;
}//operator+

complex complex::operator-(complex b){

        complex c(data[0]-b.data[0],data[1]-b.data[1],'r');
        return c;
}//operator-

complex complex::operator*(complex b){

        complex c(data[2]+b.data[2],data[3]*b.data[3],'p');
        return c;
}//operator*

complex complex::operator/(complex b){

        complex c(data[2]-b.data[2],data[3]/b.data[3],'p');
        return c;

}//operator/

complex complex::operator~(){
        complex c(data[0],data[1]*-1,'r');
        return c;
}//operator~ :conjungate

};//class complex

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2100598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100598</guid><dc:creator><![CDATA[Itrah]]></dc:creator><pubDate>Mon, 01 Aug 2011 20:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit this Zeiger on Mon, 01 Aug 2011 20:41:18 GMT]]></title><description><![CDATA[<p>Ich sehe keinen Kopier-Konstruktor für deine Matrix-Klasse, d.h. in der Zeile <code>matrix c= *this;</code> greift die compilergenerierte Version, die dafür sorgt, daß sich beide Matrizen die verwendeten Daten teilen.</p>
<p>(übrigens halte ich es nicht für eine gute Idee, Speicher für eine selbstdefinierte Klasse per malloc() anzufordern - dafür wurde new erfunden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100606</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 01 Aug 2011 20:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit this Zeiger on Wed, 03 Aug 2011 07:46:23 GMT]]></title><description><![CDATA[<p>Du verletzt die 3er-Regel. Zwei Optionen bleiben Dir:</p>
<p>(1) Füge einen korrekten Kopierkonstruktor und einen korrekten Zuweisungsoperator hinzu; denn der, der vom Compiler generiert wird tut nicht das Richtige.</p>
<p>(2) Verwende einfach std::vector als Datenelement. Dann sparst Du Dir einen selbstgeschriebenen Destruktor, Kopierkonstruktur und Zuweisungsoperator; denn die vom Compiler generierten Versionsn tun genau das richtige.</p>
<p>Warum tun die vom Compiler generierten Kopieroperationen nicht das richtige bei Dir? Nun, die Compiler generierten Kopieroperationen kopieren die Daten elementweise. Und wenn ein Zeiger kopiert wird, entsteht ein neuer Zeiger, <strong>der auf dieselben Daten zeigt</strong>. Bei Dir:</p>
<pre><code class="language-cpp">matrix matrix::testfu() const
{
   matrix c= *this;
   // *this und c zeigen auf dieselben Daten!
   for(int ii=0;ii&lt;rows;ii++){
      c.element[ii][0]=complex(0,0,'p');
   }
   return c;
}
</code></pre>
<p>Wenn dagegen ein vector kopiert wird, bekommt der neue Vektor auch eine Kopie der Daten, die er sein eigen nennen kann -- seinen eigenen Speicher.</p>
<p>Ich würde Dir empfehlen eine Matrix so zu implementieren:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class matrix
{
  vector&lt;T&gt; coefficients;
  int rows, cols;
  size_t indexof(int r, int c) {return size_t(r)*cols+c;}
public:
  T const&amp; operator()(int r, int c) const {return coefficients[indexof(r,c)];}
  T      &amp; operator()(int r, int c)       {return coefficients[indexof(r,c)];}
  ...
};
</code></pre>
<p>(Destruktor, Kopierkonstruktor und Zuzweisungsoperator sind hier nicht nötig)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101074</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 03 Aug 2011 07:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit this Zeiger on Wed, 03 Aug 2011 09:31:06 GMT]]></title><description><![CDATA[<p>Vielen Herzlichen Dank für die Antworten, es läuft jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2101110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2101110</guid><dc:creator><![CDATA[Itrah]]></dc:creator><pubDate>Wed, 03 Aug 2011 09:31:06 GMT</pubDate></item></channel></rss>