Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Der Operator int()

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
03.02.2006, 10:31 Uhr
ref



im folgende code ist operater unsigned short(); benutzt , warum?
um itsVal zu type int zu wandeln? , ich sehe, es ist schone unter:

private:
int itsVal;
};
dass itsVal als int deklariert worden
warum braucht man dann diese umwandlungsoperater : operater unsigned short(); ?
zweite frage : wird diese operater uberhaupt gerufen ? wenn ja an welche stelle
in Main

C++:
// Listing 14.9

// Umwandlungsoperator

#include <iostream>



class Counter

{

public:

     Counter();

     Counter(int val);

     ~Counter(){}

     int GetItsVal()const { return itsVal; }

     void SetItsVal(int x) {itsVal = x; }

     operator unsigned short();

private:

     int itsVal;

};



Counter::Counter():

itsVal(0)

{}



Counter::Counter(int val):

itsVal(val)

{}



Counter::operator unsigned short ()

{

     return ( int (itsVal) );

}



int main()

{

     Counter ctr(5);

     int theShort = ctr;

     std::cout << "theShort: " << theShort << std::endl;

     return 0;

}




--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.02.2006, 10:47 Uhr
Tommix



'Morgen,

Zitat:

C++:
int theShort = ctr;



Hier wird ein Counter-Objekt in ein int umgewandelt. Dafür brauchst Du den Operator. Wenn Du ihn probehalber mal raus nimmst, sollte der Compiler an dieser Stelle meckern.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.02.2006, 10:56 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Allerdings ist der cast IMHO unnötig.
Anstatt
return ( int (itsVal) );
hätte man auch
return itsVal;
schreiben können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.02.2006, 11:13 Uhr
Tommix



Das ist wohl wahr. Außerdem soll ja ein unsigned short geliefert werden, was einen weiteren, impliziten cast erfordert, der bei der Zuweisung in main (dort steht wieder int) dann quasi rückgängig gemacht wird. Wirkt nicht ganz durchdacht.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.02.2006, 11:37 Uhr
ao

(Operator)



C++:
Counter::operator unsigned short ()
{
     return ( unsigned short (itsVal) );
}

// ...

Counter c (5);
unsigned short sh = c;


So fänd ich es eigentlich logischer.

Aber trotzdem, wieso eigentlich unsigned short, wenn der native Typ des Zählers int ist? Das kann doch Überraschungen geben, wenn die Wortbreiten von int und short nicht übereinstimmen.

Und wenn der Operator nur für die Ausgabe über cout gebraucht wird, könnte man auch ostream::operator<< überladen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: