Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » CharArray einer Referenz auf Objekt String zuweisen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.03.2007, 16:13 Uhr
ProgramPaula



Hallo liebe C++ Freaks,
Ich habe eine Frage zu dem Beispiel aus dem Buch C++ in 21 Tagen , Kapitel 12 Seite 23 (Listing 12.12)
Hier der Internetlink zum Beispiel:
http://web.dadanini.com:7980/books/C++%20in%2021%20Tagen/kap12.html#72120

Meine Frage zu dem Beispiel:
in der main findet der Aufruf s1 += tempTwo statt.
tempTwo ist ein CharArray.


Das ganze Thema spielt sich in der Klasse String ab, die u.a den überladenen =+Operator deklariert.
class String
8: {
9: public:
10: // Konstruktoren
11: String();
12: void operator+=(const String&;
.
.
.
}

Die Definition des überladenen += Operator sieht wie folgt aus:
131: void String::operator+=(const String& rhs)
132: {
133: unsigned short rhsLen = rhs.GetLen();
134: unsigned short totalLen = itsLen + rhsLen;
135: String temp(totalLen);
136: unsigned short i;
137: for (i = 0; i<itsLen; i++)
138: temp[i] = itsString[i];
139: for (unsigned short j = 0; j<rhs.GetLen(); j++, i++)
140: temp[i] = rhs[i-itsLen];
141: temp[totalLen]='\0';
142: *this = temp;
143: }
144:

Es wird also eine Referenz auf die Klasse String (die weiter vorne definiert wurde, also eine
eigene Klasse) erwartet (Zeile 131). tempTwo ist aber ein CharArray. Wie soll nun der Aufruf s1 += tempTwo; (siehe unten)
funktionieren? Man kann ein CharArray doch nicht einer Referenz auf eine Klasse zuweisen??!!


int main()
{

char tempTwo[20]
strcpy(tempTwo,"; schoen hier zu sein!");
s1 += tempTwo;
.
.
.
.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.03.2007, 16:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
es würde nicht funktionieren wenn nicht der "String(const char *const);"-Konstruktor existieren würde.

Im Endeffekt baut der Compiler da folgendes draus:


C++:
s1.operator+=( String(tempTwo) );



ruft also implizit den Konstruktor auf und benutzt das entstehende Objekt dann für das +=
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.03.2007, 09:02 Uhr
ProgramPaula



Hi FloSoft ,

vielen Dank für deine Antwort! Hat mir echt weitergeholfen.
Kannst Du mir auch sagen was denn den Compiler veranlasst so nett zu sein und tempTwo via des Konstruktors String(const char *const) in ein Stringobjekt umzuwandeln anstatt einen Compilerfehler der Art: Wrong Typassignment, cannot assign char to String oder ähnliches auszuspucken? Ich meine also welches Prinzip (oder C++ Regel)steckt dahinter? Liegt es daran das tempTwo dem Stringobjekt s1 zugeordnet wird (s1.operator+=tempTwo) und der Compiler deshalb schaut, ob er tempTwo via eines Konstruktors in der Klasse String eben zum Stringobjekt umwandeln kann , bevor er dann die eigentliche Stringoperation ausführt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.03.2007, 09:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
naja standardmäßig wandelt der compiler das rechtsstehende in den linkstehenden typen um (versucht es zumindest) und das macht er eben mit den Konstruktoren.

Wenn du z.b


C++:
int zahl = 4;
zahl += tempTwo;



schreibst, versucht er z.B


C++:
zahl.operator+=( int(tempTwo) );




aufzurufen.
Geht natürlich schief, da der Basistyp keinen int(const char *)-Konstruktor hat.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.03.2007, 10:51 Uhr
ProgramPaula



Hi FloSoft,
OK- Hab ich verstanden. Vielen Dank nochmal für die Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: