<?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[Hallo bin neu hier und benötige dringend Hilfe]]></title><description><![CDATA[<p>Hallo erstmal.<br />
Wir machen in der Schule zur Zeit auch C++.<br />
Und jetzt haben wir eine Aufgabe bekommen.<br />
Und zwar soll es im Projekt sein, d.h. das eine CTString.h, CTString.cpp und main.cpp.<br />
Wir haben die CTString.h bekommen und sollen die CTString.cpp und main.cpp machen.<br />
Aber ich weiss nicht wo ich anfangen soll. Bitte um hilfe.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class CTString  
{
public:
   // Konstruktoren
   CTString();
   CTString(const char *);
   // Kopierkonstruktor
   CTString(const CTString &amp;);

   // Destruktor
   ~CTString ();

	// &quot;normale&quot; Methoden
	bool SetZeichenkette(const char*); // false, wenn kein Speicher vorhanden
	const char* GetZeichenkette();
	int GetLaenge ();

	// String einfügen
    // false, wenn kein Speicher vorhanden
	bool Insert ( int, const char* ); 
	bool Insert ( int, const CTString&amp; );
	// String Anhängen
    // false, wenn kein Speicher vorhanden
	bool Add    ( const char* );
	bool Add    ( const CTString &amp; );

	// Operatoren
	CTString&amp; operator= ( const char* );
	CTString&amp; operator= ( const CTString&amp; );
	// Ein Zeichen zuweisen
	CTString&amp; operator= ( char );
	// ASCII-Wert eines Zeichens zuweisen
	CTString&amp; operator= ( int );

    // Anhängen
	CTString&amp; operator += ( const CTString&amp; );
	CTString&amp; operator += ( const char* );

private:
   // Attribute
   char *m_szZeichenkette; //eigentlicher Stringpointer soll gekapselt sein
   unsigned int m_nLaenge; // Laenge des String

   // nützliche Funktionen
   // Bestimmt die Länge eines beliebigen Strings (strlen() aus string.h)
   unsigned int StrLaenge ( const char* );
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/131551/hallo-bin-neu-hier-und-benötige-dringend-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 06:39:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/131551.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jan 2006 13:02:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:02:46 GMT]]></title><description><![CDATA[<p>Hallo erstmal.<br />
Wir machen in der Schule zur Zeit auch C++.<br />
Und jetzt haben wir eine Aufgabe bekommen.<br />
Und zwar soll es im Projekt sein, d.h. das eine CTString.h, CTString.cpp und main.cpp.<br />
Wir haben die CTString.h bekommen und sollen die CTString.cpp und main.cpp machen.<br />
Aber ich weiss nicht wo ich anfangen soll. Bitte um hilfe.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class CTString  
{
public:
   // Konstruktoren
   CTString();
   CTString(const char *);
   // Kopierkonstruktor
   CTString(const CTString &amp;);

   // Destruktor
   ~CTString ();

	// &quot;normale&quot; Methoden
	bool SetZeichenkette(const char*); // false, wenn kein Speicher vorhanden
	const char* GetZeichenkette();
	int GetLaenge ();

	// String einfügen
    // false, wenn kein Speicher vorhanden
	bool Insert ( int, const char* ); 
	bool Insert ( int, const CTString&amp; );
	// String Anhängen
    // false, wenn kein Speicher vorhanden
	bool Add    ( const char* );
	bool Add    ( const CTString &amp; );

	// Operatoren
	CTString&amp; operator= ( const char* );
	CTString&amp; operator= ( const CTString&amp; );
	// Ein Zeichen zuweisen
	CTString&amp; operator= ( char );
	// ASCII-Wert eines Zeichens zuweisen
	CTString&amp; operator= ( int );

    // Anhängen
	CTString&amp; operator += ( const CTString&amp; );
	CTString&amp; operator += ( const char* );

private:
   // Attribute
   char *m_szZeichenkette; //eigentlicher Stringpointer soll gekapselt sein
   unsigned int m_nLaenge; // Laenge des String

   // nützliche Funktionen
   // Bestimmt die Länge eines beliebigen Strings (strlen() aus string.h)
   unsigned int StrLaenge ( const char* );
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/956578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956578</guid><dc:creator><![CDATA[tiamo]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:03:52 GMT]]></title><description><![CDATA[<p><a href="http://tutorial.schornboeck.net/operatoren_ueberladung.htm" rel="nofollow">http://tutorial.schornboeck.net/operatoren_ueberladung.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/956580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956580</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:06:49 GMT]]></title><description><![CDATA[<p>Ich habe aber ehrlich gesagt nicht so viel davon verstanden was da in dem Link steht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/956582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956582</guid><dc:creator><![CDATA[tiamo]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:08:09 GMT]]></title><description><![CDATA[<p>hast du in der schule nicht aufgepasst oder WO <em><strong>GENAU</strong></em> IST DEIN PROBLEM MIT DEM CODE?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/956585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956585</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:08:09 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:14:29 GMT]]></title><description><![CDATA[<p>Ehrlich gesagt nicht richtig aufgepasst leider <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Wir müssen damit ein String einlesen und ausgeben. dann an den String etwas hinzufügen.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/956594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956594</guid><dc:creator><![CDATA[tiamo]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:28:10 GMT]]></title><description><![CDATA[<p>okay. ich kann dir nicht alles erklaeren, was du zur loesung brauchst, sondern nur bei konkreten problemen helfen.<br />
fuer die grundlagen kannst du dieses online-tutorial benutzen:<br />
<a href="http://tutorial.schornboeck.net/oop.htm" rel="nofollow">http://tutorial.schornboeck.net/oop.htm</a></p>
<p>deine aufgabe habe ich so weit verstanden, dass du eine string-klasse schreiben sollst und dafuer schon den klassenstumpf vorgegeben bekommen hast.</p>
<p>char *m_szZeichenkette haelt dabei einen pointer zur eigentlichen zeichenkette.<br />
die ganzen memberfunktionen sollst du so schreiben, dass m_szZeichenkette nur ueber diese memberfunktionen manipuliert wird.<br />
dazu hast du unter anderem konstruktoren, einen destruktor und operatoren zu schreiben.</p>
<p>als erstes faengst du mit den konstruktoren und dem destruktor an, damit m_szZeichenkette mit etwas sinnvollem belegt ist und du weitermachen kannst.</p>
<p>bis wann muss die aufgabe fertig sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/956605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956605</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:29:41 GMT]]></title><description><![CDATA[<p>bis Freitag</p>
]]></description><link>https://www.c-plusplus.net/forum/post/956610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956610</guid><dc:creator><![CDATA[tiamo]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 13:33:06 GMT]]></title><description><![CDATA[<p>75€ VHB <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 />
<a href="mailto:king-fred@web.de" rel="nofollow">king-fred@web.de</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/956614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/956614</guid><dc:creator><![CDATA[dern00b]]></dc:creator><pubDate>Wed, 04 Jan 2006 13:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Wed, 04 Jan 2006 19:10:39 GMT]]></title><description><![CDATA[<p>mal ganz einfach angefangen:<br />
kannst Du die Implementierung von</p>
<pre><code class="language-cpp">int GetLaenge ();
</code></pre>
<p>hinschreiben?</p>
<p>Fragt<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/957031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/957031</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 04 Jan 2006 19:10:39 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Thu, 05 Jan 2006 22:29:23 GMT]]></title><description><![CDATA[<p>hallo habe das alles geschafft aber komme hier nicht weiter bitte um hilfe.</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include &quot;Tstring.h&quot;
// 1.Konstruktor
Tstring::Tstring()
{
     //Adresse auf Null setzen             
     String = NULL;
     Stringlaenge =0;      
}
//2. Konstruktor
Tstring::Tstring(const char *str)
{
    //Adresse auf NUll setzen                    
    String = NULL;            
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str);                   
}
//3. Kopierkonstruktor
Tstring::Tstring(Tstring &amp; str)
{
    //Adresse auf NUll setzen                    
    String = NULL;            
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str.String);                   
}
//Destruktor
Tstring::~Tstring()
{
    free(String);
    Stringlaenge = 0;
}
// Ersatz für die Funktion &quot;strlen&quot;
unsigned int Tstring::AnzahlZeichen(const char *str)
{
         unsigned int len= 0;
         while(str[len] !='\0')
         {
                        len++;
         }
         return len;
}

bool Tstring::Setstring(const char *str)
{
     Stringlaenge = AnzahlZeichen(str);
     //Prüft ob String vorhanden und reserviert den Speicher 
     if (String == NULL)
     {
         String =(char*) malloc ((Stringlaenge +1) * sizeof (char));
     }
     else
     {             
         String =(char*) realloc(String,(Stringlaenge+1) * sizeof (char));
     }
     // Prüft ob Speicher reserviert werden konnte 
     if (String != NULL)
     {
               //Koppiert alle Zeichen inklusive /0
               for(unsigned int i=0;i&lt;=Stringlaenge;i++)
               {
                   String[i]=str[i];                          
               }
               return true;
     }
     else
     {
         return false;
     }
}
//Einfüge Methode
bool Tstring::Einfuegen(unsigned int position, const char *str)
{
     unsigned int len = AnzahlZeichen(str);
     //Prüft ob Speicher reserviert wurde und reserviert Speicher 
      if (String == NULL)
     {
         String =(char*) malloc ((Stringlaenge+len+1) * sizeof (char));
     }
     else
     {             
         String =(char*) realloc(String,(Stringlaenge+len+1) * sizeof (char));
     }
     // Prüft ob Speicher reserviert werden konnte 
     if (String != NULL)
     {
      // position= position -1 damit das Zeichen an der angegeben Stelle nicht vergessen wird 
      position -= 1; 

      for ( int i = Stringlaenge; i &gt;=position; i-- )
      {
         String[i+len] = String[i];
      }
      for ( int i = position; i &lt;position +len; i++ )
      { 
         String[i] = str[i-position];
      }
      // Neue Länge 
     Stringlaenge +=len; //Stringlaenge = Stringlaenge +len
     return true;
     }
     else
     {
         return false;
     }    
}
//Anhaenge Methode
bool Tstring::Anhaengen(const char *str)
{
     return Einfuegen(Stringlaenge,str);
}
const char *Tstring::Getstring(void)
{    
     if(Stringlaenge &gt;0)
     {
     return String;
     }
     else
     { 
         return &quot;Noch kein String vorhanden&quot;;
     }
}
unsigned int Tstring::Getstringlaenge(void)
{
         return Stringlaenge;
}

// Operatoren
Tstring &amp;Tstring::operator= ( const char* str)
{
     this-&gt;Setstring(str);
     return *this;   
}
Tstring &amp;Tstring::operator=(const Tstring &amp; str)
{
     this-&gt;Setstring(str.String);
     return *this;      
}
 // Ein Zeichen zuweisen	         
Tstring &amp;Tstring::operator= ( char str)
{
      char ttt[2];
      ttt[0]=str;
      ttt[1]='\0';
      Setstring(ttt);
}
// ASCII-Wert eines Zeichens zuweisen
Tstring &amp;Tstring::operator= ( int)
{

}
//Anfüge Operatoren 
Tstring &amp;Tstring::operator += ( const Tstring &amp; str)
{
        this-&gt;Anhaengen(str.String);
        return *this;
} 
Tstring &amp;Tstring::operator += ( const char* str )
{
        this-&gt;Anhaengen(str);
        return *this;       
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/958307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958307</guid><dc:creator><![CDATA[tiamo]]></dc:creator><pubDate>Thu, 05 Jan 2006 22:29:23 GMT</pubDate></item><item><title><![CDATA[Reply to Hallo bin neu hier und benötige dringend Hilfe on Fri, 06 Jan 2006 12:22:01 GMT]]></title><description><![CDATA[<p>tiamo schrieb:</p>
<blockquote>
<p>hallo habe das alles geschafft aber komme hier nicht weiter bitte um hilfe.</p>
</blockquote>
<p>Schon nicht schlecht; schau'n wir mal ...</p>
<p>tiamo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include &quot;Tstring.h&quot;
// 1.Konstruktor
Tstring::Tstring()
{
     //Adresse auf Null setzen             
     String = NULL;
     Stringlaenge =0;      
}
//2. Konstruktor
Tstring::Tstring(const char *str)
{
    //Adresse auf NUll setzen                    
    String = NULL;            
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str);                   
}
//3. Kopierkonstruktor
Tstring::Tstring(Tstring &amp; str)
{
    //Adresse auf NUll setzen                    
    String = NULL;            
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str.String);                   
}
</code></pre>
</blockquote>
<p>Nicht so schön ist, dass Du den Namen der String-Klasse und den Namen der Member-Variblen geändert hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> - das erschwert auch den Antwortenden die Arbeit. Ich nutze bei meinen Antworten die Namen aus Deinem ersten Posting.<br />
Bei Konstruktoren bitte immer die Initialisierungsliste benutzen. Das sieht so aus</p>
<pre><code class="language-cpp">// 1.Konstruktor
CTString::CTString()
    : m_szZeichenkette( 0 )
    , m_nLaenge( 0 )
{}
//2. Konstruktor
CTString::CTString(const char *str)
    : m_szZeichenkette( 0 )
    , m_nLaenge( 0 )
{
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str);                   
}
//3. Kopierkonstruktor
CTString::CTString( const CTString&amp; str)
    : m_szZeichenkette( 0 )
    , m_nLaenge( 0 )
{
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str.m_szZeichenkette);                   
}
</code></pre>
<p>Den Kopie-Konstruktor immer mit einer const Referenz versehen; das übergebende Objekt wird schließlich dabei nicht verändert.<br />
Bei Setstring musst Du immer die Länge des Strings feststellen, obwohl diese u.U. bereits bekannt ist. Besser wäre</p>
<pre><code class="language-cpp">bool CTString::Setstring(const char *str, unsigned int laenge )
{
    // usw..
</code></pre>
<p>Die betroffenen Kopierkonstruktoren ändern sich dann zu</p>
<pre><code class="language-cpp">//2. Konstruktor
CTString::CTString(const char *str)
    : m_szZeichenkette( 0 )
    , m_nLaenge( 0 )
{
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str, StrLaenge(str));                   
}
//3. Kopierkonstruktor
CTString::CTString( const CTString&amp; str)
    : m_szZeichenkette( 0 )
    , m_nLaenge( 0 )
{
    //Setstring aufrufen um den an den K. übergebenen String in das Attribut String zu schreiben       
    Setstring(str.m_szZeichenkette,str.m_nLaenge );                   
}
</code></pre>
<p>Die Methode 'StrLaenge' sollte übrigens static sein, da sie keine Member benötigt; oder noch besser zu einer loaklen Funktion werden, die nur in TString.cpp vorkommt.</p>
<p>tiamo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//Destruktor
Tstring::~Tstring()
{
    free(String);
    Stringlaenge = 0;
}
// Ersatz für die Funktion &quot;strlen&quot;
unsigned int Tstring::AnzahlZeichen(const char *str)
{
         unsigned int len= 0;
         while(str[len] !='\0')
         {
                        len++;
         }
         return len;
}

bool Tstring::Setstring(const char *str)
{
     Stringlaenge = AnzahlZeichen(str);
     //Prüft ob String vorhanden und reserviert den Speicher 
     if (String == NULL)
     {
         String =(char*) malloc ((Stringlaenge +1) * sizeof (char));
     }
     else
     {             
         String =(char*) realloc(String,(Stringlaenge+1) * sizeof (char));
     }
     // Prüft ob Speicher reserviert werden konnte 
     if (String != NULL)
     {
               //Koppiert alle Zeichen inklusive /0
               for(unsigned int i=0;i&lt;=Stringlaenge;i++)
               {
                   String[i]=str[i];                          
               }
               return true;
     }
     else
     {
         return false;
     }
}
</code></pre>
</blockquote>
<p>Die 'NULL' stammt noch von C und kann in C++ getrost durch eine '0' ersetzt werden. Das gleiche gilt für alloc und free. In C++ wäre das durch new und delete zu ersetzen. Auch für den void-Parameter in leeren Parameter-Listen gilt: der kann in C++ weggelassen werden.</p>
<p>tiamo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Tstring &amp;Tstring::operator=(const Tstring &amp; str)
{
     this-&gt;Setstring(str.String);
     return *this;      
}
</code></pre>
</blockquote>
<p>Der Assignment-operator fehlte in Deinem OP; ist aber bitter notwendig</p>
<p>tiamo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// ASCII-Wert eines Zeichens zuweisen
Tstring &amp;Tstring::operator= ( int)
{
        
        
}
</code></pre>
</blockquote>
<p>ich sehe keinen Unterschied zu der Zuweisung eines char's. Also z.B.:</p>
<pre><code class="language-cpp">CTString::CTSring&amp; operator=( int c )
{
    return (*this) = char( c );
}
</code></pre>
<p>Fehlt jetzt noch was?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/958634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/958634</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 06 Jan 2006 12:22:01 GMT</pubDate></item></channel></rss>