<?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[Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :)]]></title><description><![CDATA[<p>Hallo zusammen<br />
Ich bin neu hier im Forum und verzweifelt auf der Suche nach Hilfe. Ich stecke im zweiten Semester E-Technik und muss für Info eine Klasse safe_int schreiben, durch die Zahlbereichsüberschreitungen während des Rechnens erkannt werden.<br />
Der Prof hat viele Codefragmente in die Aufgabe eingebaut, aber beim Zusammenfrickeln haben sich da für mich viele Probleme ergeben die Syntax korrekt hinzukriegen. Es sind einfach zuviele Sachen neu und er erklärt viel zu wenig.<br />
Versteh ich wenn sich diese &quot;Wall of Code&quot; nicht jeder antuen will, aber vielleicht hat ja jemand von euch heute nen sozialen Tag <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>So sieht meine Klasse bisher aus:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
using namespace std;

class safe_int{
   private:
      int val;
      static const string limit_string;
      static string lim_to_string();
      static int divi(int,int);
      static int mod(int,int);

   public: 
      static const int lim;        
      class overflow {};
      safe_int(int) throw(overflow);
      safe_int() throw();
      friend safe_int operator+(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator-(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator*(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator/(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator%(safe_int,safe_int) throw(safe_int::overflow);
      friend ostream&amp; operator&lt;&lt;(ostream&amp;,safe_int) throw(safe_int::overflow);
      friend istream&amp; operator&gt;&gt;(istream&amp;,safe_int) throw(safe_int::overflow);         
};
</code></pre>
<p><strong>Direkt dahinter definiere(??) ich const int lim (max positive darstellbare Zahl...also meist 2147483647) folgendermaßen:</strong></p>
<pre><code class="language-cpp">const int safe_int::lim=numeric_limits&lt;int&gt;::max();
</code></pre>
<p><strong>und weil ich eingegebne Zahlen auch als String mit lim vergleichen muss, wird<br />
lim auch in einen String umgewandelt:</strong></p>
<pre><code class="language-cpp">const string safe_int::limit_string=lim_to_string();

string safe_int::lim_to_string(){
ostringstream ostr;
ostr&lt;&lt;lim;
return ostr.str();
}
</code></pre>
<p><strong>//Und dann beginnen die Fehlermeldungen im überladenem &gt;&gt; Operator:</strong></p>
<pre><code class="language-cpp">istream &amp;operator&gt;&gt;(istream &amp;is,safe_int &amp;a) throw(safe_int::overflow){
is&gt;&gt;ws;
int sign=is.peek();
if(sign=='+'||sign=='-') is.get();
string zahl;
while(isdigit(is.peek())){
   zahl+=is.get();  
                          }//of while
if(zahl.size()==0){
   if(sign=='+'||sign=='-'){
   is.putback(sign);
                            }//of if Vorzeichen
is.setstate(ios_base::failbit);                 
                  }//of if keine Zahl eingelesen
if(zahl.size()&gt; safe_int::limit_string.size() ||zahl.size()==safe_int::limit_string.size()&amp;&amp; zahl&gt;safe_int::limit_string){
      throw safe_int::overflow();  
                                                                                                                        } 
istringstream istr(zahl);
istr&gt;&gt;a.val;
if(sign=='-') a.val=-a.val;                 

}//of operater &gt;&gt; EINGABE
</code></pre>
<p><strong>Den Code für diesen Operator habe ich quasi 1:1 aus seiner Aufgabenstellung entnommen. Aber bei z.B. &quot;safe_int::limit_string.size()&quot; meckert der Compiler<br />
`const std::string safe_int::limit_string' is private within this Context<br />
Verstehe ich nicht, da &gt;&gt;Operator doch ein friend von safe_int ist</strong></p>
<p><em><em>Das nächste Problem was häufig angemeckert wird findet sich in den +/-/%/</em> Opteratoren: declaration of `safe_int operator+(safe_int, safe_int)' throws different exceptions than previous declaration `safe_int operator+(safe_int, safe_int) throw (safe_int::overflow)' Verstehe ich auch nicht, da die einzige exception die ich benutze doch safe_int::overflow ist?? Allerdings muss ich gestehen, dass ich das mit dem Overflow noch nicht kapiert habe, wie eine leere Klasse jetzt vernünftig reagieren soll^^</em>*<br />
Hier mein Code für den +Operator der diesen Fehler produziert</p>
<pre><code class="language-cpp">safe_int operator+(safe_int a,safe_int b){
    safe_int erg;
    if((b.val&gt;0 &amp;&amp; a.val&gt;lim-b.val) || (b.val&lt;0 &amp;&amp; -a.val&gt;lim+b.val)){
       throw(safe_int::overflow);       
                                                                      }
    erg.val=a.val+b.val;                                                                  
return erg;    
}
</code></pre>
<p>**Das zweite was er hieran meckert ist, das er lim nicht kennt. Wie muss ich in einer Friendfunktion eine Konstante einer Klasse aufrufen?<br />
**</p>
<p>Hmmm...das wars erstmal von der Front. Wenn ihr mehr Fehlermeldungen hören wollt meldet euch. Die gehen mir so schnell nicht aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Hoffe jemand kann mir armen Wicht helfen.<br />
Schönen Tag euch</p>
<p>Epi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199043/klassen-und-wie-ich-in-friendfunktionen-auf-elemente-zugreife-viele-fragen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 12:17:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199043.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Nov 2007 11:36:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 11:42:54 GMT]]></title><description><![CDATA[<p>Hallo zusammen<br />
Ich bin neu hier im Forum und verzweifelt auf der Suche nach Hilfe. Ich stecke im zweiten Semester E-Technik und muss für Info eine Klasse safe_int schreiben, durch die Zahlbereichsüberschreitungen während des Rechnens erkannt werden.<br />
Der Prof hat viele Codefragmente in die Aufgabe eingebaut, aber beim Zusammenfrickeln haben sich da für mich viele Probleme ergeben die Syntax korrekt hinzukriegen. Es sind einfach zuviele Sachen neu und er erklärt viel zu wenig.<br />
Versteh ich wenn sich diese &quot;Wall of Code&quot; nicht jeder antuen will, aber vielleicht hat ja jemand von euch heute nen sozialen Tag <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>So sieht meine Klasse bisher aus:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
using namespace std;

class safe_int{
   private:
      int val;
      static const string limit_string;
      static string lim_to_string();
      static int divi(int,int);
      static int mod(int,int);

   public: 
      static const int lim;        
      class overflow {};
      safe_int(int) throw(overflow);
      safe_int() throw();
      friend safe_int operator+(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator-(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator*(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator/(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator%(safe_int,safe_int) throw(safe_int::overflow);
      friend ostream&amp; operator&lt;&lt;(ostream&amp;,safe_int) throw(safe_int::overflow);
      friend istream&amp; operator&gt;&gt;(istream&amp;,safe_int) throw(safe_int::overflow);         
};
</code></pre>
<p><strong>Direkt dahinter definiere(??) ich const int lim (max positive darstellbare Zahl...also meist 2147483647) folgendermaßen:</strong></p>
<pre><code class="language-cpp">const int safe_int::lim=numeric_limits&lt;int&gt;::max();
</code></pre>
<p><strong>und weil ich eingegebne Zahlen auch als String mit lim vergleichen muss, wird<br />
lim auch in einen String umgewandelt:</strong></p>
<pre><code class="language-cpp">const string safe_int::limit_string=lim_to_string();

string safe_int::lim_to_string(){
ostringstream ostr;
ostr&lt;&lt;lim;
return ostr.str();
}
</code></pre>
<p><strong>//Und dann beginnen die Fehlermeldungen im überladenem &gt;&gt; Operator:</strong></p>
<pre><code class="language-cpp">istream &amp;operator&gt;&gt;(istream &amp;is,safe_int &amp;a) throw(safe_int::overflow){
is&gt;&gt;ws;
int sign=is.peek();
if(sign=='+'||sign=='-') is.get();
string zahl;
while(isdigit(is.peek())){
   zahl+=is.get();  
                          }//of while
if(zahl.size()==0){
   if(sign=='+'||sign=='-'){
   is.putback(sign);
                            }//of if Vorzeichen
is.setstate(ios_base::failbit);                 
                  }//of if keine Zahl eingelesen
if(zahl.size()&gt; safe_int::limit_string.size() ||zahl.size()==safe_int::limit_string.size()&amp;&amp; zahl&gt;safe_int::limit_string){
      throw safe_int::overflow();  
                                                                                                                        } 
istringstream istr(zahl);
istr&gt;&gt;a.val;
if(sign=='-') a.val=-a.val;                 

}//of operater &gt;&gt; EINGABE
</code></pre>
<p><strong>Den Code für diesen Operator habe ich quasi 1:1 aus seiner Aufgabenstellung entnommen. Aber bei z.B. &quot;safe_int::limit_string.size()&quot; meckert der Compiler<br />
`const std::string safe_int::limit_string' is private within this Context<br />
Verstehe ich nicht, da &gt;&gt;Operator doch ein friend von safe_int ist</strong></p>
<p><em><em>Das nächste Problem was häufig angemeckert wird findet sich in den +/-/%/</em> Opteratoren: declaration of `safe_int operator+(safe_int, safe_int)' throws different exceptions than previous declaration `safe_int operator+(safe_int, safe_int) throw (safe_int::overflow)' Verstehe ich auch nicht, da die einzige exception die ich benutze doch safe_int::overflow ist?? Allerdings muss ich gestehen, dass ich das mit dem Overflow noch nicht kapiert habe, wie eine leere Klasse jetzt vernünftig reagieren soll^^</em>*<br />
Hier mein Code für den +Operator der diesen Fehler produziert</p>
<pre><code class="language-cpp">safe_int operator+(safe_int a,safe_int b){
    safe_int erg;
    if((b.val&gt;0 &amp;&amp; a.val&gt;lim-b.val) || (b.val&lt;0 &amp;&amp; -a.val&gt;lim+b.val)){
       throw(safe_int::overflow);       
                                                                      }
    erg.val=a.val+b.val;                                                                  
return erg;    
}
</code></pre>
<p>**Das zweite was er hieran meckert ist, das er lim nicht kennt. Wie muss ich in einer Friendfunktion eine Konstante einer Klasse aufrufen?<br />
**</p>
<p>Hmmm...das wars erstmal von der Front. Wenn ihr mehr Fehlermeldungen hören wollt meldet euch. Die gehen mir so schnell nicht aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Hoffe jemand kann mir armen Wicht helfen.<br />
Schönen Tag euch</p>
<p>Epi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411493</guid><dc:creator><![CDATA[Epimetheus]]></dc:creator><pubDate>Wed, 28 Nov 2007 11:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 11:44:38 GMT]]></title><description><![CDATA[<p>Hier das ganze &quot;Meisterwerk&quot; (sieht so cool aus mit der cpp Formatierung:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
using namespace std;

class safe_int{
   private:
      int val;
      static const string limit_string;
      static string lim_to_string();
      static int divi(int,int);
      static int mod(int,int);

   public: 
      static const int lim;        
      class overflow {};
      safe_int(int) throw(overflow);
      safe_int() throw();
      friend safe_int operator+(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator-(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator*(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator/(safe_int,safe_int) throw(safe_int::overflow);
      friend safe_int operator%(safe_int,safe_int) throw(safe_int::overflow);
      friend ostream&amp; operator&lt;&lt;(ostream&amp;,safe_int) throw(safe_int::overflow);
      friend istream&amp; operator&gt;&gt;(istream&amp;,safe_int) throw(safe_int::overflow);         
};
const int safe_int::lim=numeric_limits&lt;int&gt;::max();
const string safe_int::limit_string=lim_to_string();

string safe_int::lim_to_string(){
ostringstream ostr;
ostr&lt;&lt;lim;
return ostr.str();
}

ostream&amp; operator&lt;&lt;(ostream&amp;,safe_int a) throw(safe_int::overflow){
    cout&lt;&lt;a.val;         
}

istream &amp;operator&gt;&gt;(istream &amp;is,safe_int &amp;a) throw(safe_int::overflow){
is&gt;&gt;ws;
int sign=is.peek();
if(sign=='+'||sign=='-') is.get();
string zahl;
while(isdigit(is.peek())){
   zahl+=is.get();  
                          }//of while
if(zahl.size()==0){
   if(sign=='+'||sign=='-'){
   is.putback(sign);
                            }//of if Vorzeichen
is.setstate(ios_base::failbit);                 
                  }//of if keine Zahl eingelesen
if(zahl.size()&gt; safe_int::limit_string.size() ||zahl.size()==safe_int::limit_string.size()&amp;&amp; zahl&gt;safe_int::limit_string){
      throw safe_int::overflow();  
                                                                                                                        } 
istringstream istr(zahl);
istr&gt;&gt;a.val;
if(sign=='-') a.val=-a.val;                 

}//of operater &gt;&gt; EINGABE

void menue(safe_int a,safe_int b,char op);
char operaEinlesen();

//**************************************************MAIN***************************************************

int main(){
   	char opera,bee='n';
   	safe_int zahl1,zahl2;
	do{
      cout&lt;&lt;&quot;Bitte geben sie die erste Zahl ein:&quot;&lt;&lt;endl;
      cin&gt;&gt;zahl1;       
      opera=operaEinlesen();
      cout&lt;&lt;&quot;Bitte geben sie die zweite Zahl ein:&quot;&lt;&lt;endl; 
      cin&gt;&gt;zahl2;
      menue(zahl1,zahl2,opera);
      cout&lt;&lt;&quot;Moechten Sie das Programm beenden:Druecken sie eine beliebige Taste\n Druecken Sie &quot;&quot;n&quot;&quot; um weitere safe_int Berechnungen durchzufuehren.&quot;;
	  cin&gt;&gt;bee;
	 }while(bee=='n');      
}//of main

//************************************************************************************************************

safe_int operator+(safe_int a,safe_int b){
    safe_int erg;
    if((b.val&gt;0 &amp;&amp; a.val&gt;lim-b.val) || (b.val&lt;0 &amp;&amp; -a.val&gt;lim+b.val)){
       throw(safe_int::overflow);       
                                                                      }
    erg.val=a.val+b.val;                                                                  
return erg;    
}

safe_int operator-(safe_int a,safe_int b){
    safe_int erg;    
    if((b.val&gt;0 &amp;&amp; -a.val&gt;lim-b.val) || (b.val&lt;0 &amp;&amp; a.val&gt;lim+b.val)){
       throw(safe_int::overflow);       
                                                                     }
    erg.val=a.val-b.val;                                                                 
return erg;    
}

safe_int operator*(safe_int a,safe_int b){
    int ba,bb;
    safe_int erg;
    if(a.val&lt;0){
       ba=a.val*-1; 
               }
       else ba=a.val;     
    if(b.val&lt;0){
       bb=b.val*-1;     
            }
       else bb=b.val;     
    //cout &lt;&lt;bb;
    //cout &lt;&lt;&quot;\n&quot;;
    //cout &lt;&lt;lim;                
    if(b.val !=0 &amp;&amp; ba &gt; lim/bb){
       throw(safe_int::overflow);       
                                }
    erg.val=a.val*b.val;                    
return erg;        
}

safe_int operator/(safe_int a,safe_int b){
   safe_int erg;
   int c,aa,bb;
   aa=a.val;
   bb=b.val;
   c=safe_int::divi(aa,bb);
   erg.val=c;
return erg;
}

safe_int operator%(safe_int a,safe_int b){
   safe_int erg;
   int c,aa,bb;
   aa=a.val;
   bb=b.val;   
   c=safe_int::mod(aa,bb);
   erg.val=c;
return erg;    
}

int safe_int::divi(int a,int b){
int q,r;

   if(b==0){
      throw (safe_int::overflow);       
             }
   q=a/b;
   r=a-q*b;
   if(a&lt;0)
      {
      if(r&gt;0)
         if(b&gt;0)
       	    q=q+1;
            else
          	    q=q-1;
      }
   else
      if(r&lt;0) 
         q=q+1;

return q;    
}

int safe_int::mod(int a,int b){
int q,r;
 if(b==0){
    throw (safe_int::overflow);        
         }
 q=a/b;
 r=a-q*b;
   if(a&lt;0){

   if(r&gt;0)
      if(b&gt;0)
	     r=r-b;
         else{
	         r=r+b;
             }
         }
   else
      if(r&lt;0){
             r=r-b;
             }

return r;    
}

void menue(safe_int a,safe_int b,char op){
     safe_int erg;
     switch(op){
           case '+':{
                    try{
                       erg=a+b;
                       cout &lt;&lt;&quot;\nDas Ergebnis der Addition lautet:&quot;&lt;&lt;erg;
                       }
                    catch(){
                          cout&lt;&lt;&quot;overflow bei &quot;&lt;&lt;endl;
                          //cout &lt;&lt;&quot;\nDas Ergebnis der Addition lautet:&quot;&lt;&lt;erg;
                         }  
                    break;
                    }//case +
           case '-':{
                    try{
                       erg=a-b;
                       cout &lt;&lt;&quot;\nDas Ergebnis der Subtraktion lautet:&quot;&lt;&lt;erg;
                       }
                    catch(){
                          cout&lt;&lt;&quot;overflow bei &quot;&lt;&lt;endl;
                          //cout &lt;&lt;&quot;\nDas Ergebnis der Subtraktion lautet:&quot;&lt;&lt;erg;
                         }                  
                    break;
                    }//case +
           case '*':{
                    try{
                       erg=a*b;
                       cout &lt;&lt;&quot;\nDas Ergebnis der Multiplikation lautet:&quot;&lt;&lt;erg;
                       }
                    catch(){
                          cout&lt;&lt;&quot;overflow bei &quot;&lt;&lt;endl;
                          //cout &lt;&lt;&quot;\nDas Ergebnis der Multiplikation lautet:&quot;&lt;&lt;erg;
                         }                  
                    break;
                    }//case +
           case '/':{
                    try{
                       erg=a/b;
                       cout &lt;&lt;&quot;\nDas Ergebnis der Division lautet:&quot;&lt;&lt;erg;
                       }
                    catch(){
                          cout&lt;&lt;&quot;overflow bei &quot;&lt;&lt;endl;
                          //cout &lt;&lt;&quot;\nDas Ergebnis der Division lautet:&quot;&lt;&lt;erg;
                         }                  
                    break;
                    }//case +
           case '%':{
                    try{
                       erg=a%b;
                       cout &lt;&lt;&quot;\nDas Ergebnis der Modulooperation lautet:&quot;&lt;&lt;erg;
                       }
                    catch(){
                          cout&lt;&lt;&quot;overflow bei &quot;&lt;&lt;endl;
                          //cout &lt;&lt;&quot;\nDas Ergebnis der Modulooperation lautet:&quot;&lt;&lt;erg;
                         }                  
                    break;
                    }//case +  
           default: cout &lt;&lt;&quot;Diesen Text wird nie jemand lesen.&quot;;                                                                                        

                }//of switch
}//of menue

char operaEinlesen(){
       int ianz,fehler=0;
       char zeichen;
       cout &lt;&lt;&quot;Bitte geben sie einen gueltigen Operator an (+,-,*,/,%):\n&quot;; 
       do{ 
         ianz=scanf(&quot;%c&quot;,&amp;zeichen);
         fflush(stdin);
         if (zeichen=='+' || zeichen=='/' || zeichen=='*' || zeichen=='-' || zeichen=='%'){
            fehler=0;
                                                                                                       }
            else{
                 cout &lt;&lt;&quot;Eingabefehler. Bitte geben sie einen gueltigen Operator an (+,-,*,/,%):\n&quot;;
                 fehler=1;
                 }

        }while (ianz!=1 || fehler==1); 
return zeichen;                
}//of operaEinlesen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1411498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411498</guid><dc:creator><![CDATA[Epimetheus]]></dc:creator><pubDate>Wed, 28 Nov 2007 11:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 12:01:36 GMT]]></title><description><![CDATA[<p>Epimetheus schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
class safe_int{
...
      istream &amp;operator&gt;&gt;(istream,safe_int) throw(safe_int::overflow);
...
</code></pre>
</blockquote>
<p>&lt;=&gt;</p>
<p>Epimetheus schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">istream &amp;operator&gt;&gt;(istream &amp;is,safe_int &amp;a) throw(safe_int::overflow){
</code></pre>
<p>...</p>
</blockquote>
<p>Ist nicht dieselbe Funktionssignatur.<br />
Deswegen &quot;befriendet&quot; die friend clause auch die u.g. Funktion nicht.<br />
=&gt; Kein Zugriff auf private Member.</p>
<p>Übrigens: Ich würde mit &quot;friend&quot; seeehr sparsam sein - und konkret hier weglassen.<br />
Besser:<br />
A) public member function definieren (scan(), print()) und die vom operator&gt;&gt;()/operator&lt;&lt;() aufrufen.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> safe_int::getLimitSize(); definieren.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411502</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Nov 2007 12:01:36 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 11:58:43 GMT]]></title><description><![CDATA[<pre><code>friend istream&amp; operator&gt;&gt;(istream&amp;,safe_int[b]&amp;[/b]) throw(safe_int::overflow);
</code></pre>
<p>von Exceptionspezifikationen ist abzuraten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411504</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Nov 2007 11:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 12:43:18 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>von Exceptionspezifikationen ist abzuraten.</p>
</blockquote>
<p>agreed.<br />
<a href="http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=109&amp;rl=1" rel="nofollow">http://www.informit.com/guides/content.aspx?g=cplusplus&amp;seqNum=109&amp;rl=1</a></p>
<p>spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.<br />
spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.spambusterüberlistung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411533</guid><dc:creator><![CDATA[el capitan]]></dc:creator><pubDate>Wed, 28 Nov 2007 12:43:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 14:58:51 GMT]]></title><description><![CDATA[<p>Die Exceptionspezifikationen hat er auf dem Aufgabenblatt aufgeführt und die hab ich wie gesagt auch nicht verstanden. <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="🙂"
    /> Also weg damit.</p>
<blockquote>
<p>A) public member function definieren (scan(), print()) und die vom operator&gt;&gt;()/operator&lt;&lt;() aufrufen.</p>
</blockquote>
<p>Was das bedeutet weiß ich leider nicht. Haben Klassen jetzt seit 6 Vorlesungen und das letzte was wir gemacht haben war Vererbung. Bin da also nicht so wirklich fit. Aber danke für die Hilfe soweit <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411631</guid><dc:creator><![CDATA[Epimetheus]]></dc:creator><pubDate>Wed, 28 Nov 2007 14:58:51 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Wed, 28 Nov 2007 15:20:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ist nicht schwer:</p>
<pre><code class="language-cpp">class safe_int{
... 
   public:
      istream&amp; scan(istream&amp;); // Hier machst Du die Implementation der EinleseRoutine
      ostream&amp; print(ostream&amp;) const; // Hier machst Du die Implementation der AusgabeRoutine
};

ostream&amp; operator&lt;&lt;(ostream&amp; ost, safe_int const&amp; i) { return i.print(ost); }
istream&amp; operator&gt;&gt;(istream&amp; ist ,safe_int&amp; i) { return i.scan(ist); }
</code></pre>
<p>Ist ein Idiom, das viele Vorteile hat, weswegen ich es immer anwende....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1411657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1411657</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Nov 2007 15:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Thu, 29 Nov 2007 09:20:18 GMT]]></title><description><![CDATA[<p>Super. Danke für den Tipp.<br />
Eine Sache hab ich noch selber rausgefunden: Das er lim nicht kennt liegt schlicht und ergreifend daran, dass ich es einfach lim nenne in einer Friendfunktion.<br />
Es muss natürlich safe_int::lim heißen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412041</guid><dc:creator><![CDATA[Epimetheus]]></dc:creator><pubDate>Thu, 29 Nov 2007 09:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Fri, 30 Nov 2007 15:52:56 GMT]]></title><description><![CDATA[<p>soo...in der neuen Aufgabe sollen wir die Friendfunktionen in Komponentenfunktionen umwandeln. Und dabei hat sich ein neues Problem ergeben:</p>
<p>Ich hab den Tip bekommen das man, um a=b+c+d //a,b,c,d sind safe_int<br />
gescheit rechnen zu können, beim operator+ eine Referenz zurückgegeben werden muss(??).<br />
Dadurch verändert sich meine Klasse folgendermaßen:</p>
<pre><code>class safe_int{
   private:
      int val;
      static const string limit_string;
      static string lim_to_string();
      static int divi(int,int);
      static int mod(int,int);

   public: 
      static const int lim;        
      class overflow {
      	public:
		int op1,op2;
		char func[30];
		overflow(char *f,int i,int j){
			op1=i;
			op2=j;
			strcpy(func,f); 
		                             }
	    };//of class overflow 

      safe_int(string zahl);
      safe_int() throw() {val=0;}
      safe_int&amp; operator+(safe_int b);
      safe_int&amp; operator-(safe_int b);
      safe_int&amp; operator*(safe_int b);
      safe_int&amp; operator/(safe_int b);
      safe_int&amp; operator%(safe_int b);
      friend ostream&amp; operator&lt;&lt;(ostream&amp;,safe_int);
      friend istream&amp; operator&gt;&gt;(istream&amp;,safe_int&amp;);         
};
</code></pre>
<p>Mein Komponenten-Operator + sieht jetzt so aus:</p>
<pre><code>safe_int&amp; safe_int::operator+(safe_int b){

    safe_int erg;
    if((b.val&gt;0 &amp;&amp; val&gt;lim-b.val) || (b.val&lt;0 &amp;&amp; -val&gt;lim+b.val)){
       throw overflow(&quot;Addition&quot;,val,b.val);       
    erg.val=val+b.val;                                                                  }                                                                  
return erg;    
}
</code></pre>
<p>Das das so nicht funktionieren kann ist mir bewusst, weil man keine Referenz auf eine lokale Variable binden darf bzw. das Unsinn ist. Allerdings weiß ich nicht wie ich das Ergebnis vernünftig zurückgeben kann.<br />
Mitlerweile hat sich bei mir wieder ein Zustand größter Verwirrung eingestellt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich wäre super dankbar wenn mir wer sagen könnte wie das geht. Denn dann bin ich in der Lage alle weiteren Aufgaben zu lösen.</p>
<p>Epi <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413036</guid><dc:creator><![CDATA[Epimetheus]]></dc:creator><pubDate>Fri, 30 Nov 2007 15:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen und wie ich in Friendfunktionen auf Elemente zugreife -- (viele)Fragen :) on Fri, 30 Nov 2007 15:58:05 GMT]]></title><description><![CDATA[<p>Gib eine Kopie zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413041</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 30 Nov 2007 15:58:05 GMT</pubDate></item></channel></rss>