Verständnissfrage zum casten



  • also kann mir jemand kurz erklären was das casten genau bedeutet?

    vielleicht an den beispielen

    CString tmp; 
    tmp=(CString)lptstr;
    
    char params[10]="HalloWelt"; 
    CString temp;
    temp=(CString)params;
    

    kann man so alle variablentypen beliebig umwandeln??? Worauf sollte man generell dabei achten?



  • bei wert zu klasse musst du natürlich aufpassen, dass die klasse damit was anfangen kann

    falls nich meckert eh der compiler

    im falle des CString:

    // constructs empty CString
    	CString();
    	// copy constructor
    	CString(const CString& stringSrc);
    	// from a single character
    	CString(TCHAR ch, int nRepeat = 1);
    	// from an ANSI string (converts to TCHAR)
    	CString(LPCSTR lpsz);
    	// from a UNICODE string (converts to TCHAR)
    	CString(LPCWSTR lpsz);
    	// subset of characters from an ANSI string (converts to TCHAR)
    	CString(LPCSTR lpch, int nLength);
    	// subset of characters from a UNICODE string (converts to TCHAR)
    	CString(LPCWSTR lpch, int nLength);
    	// from unsigned characters
    	CString(const unsigned char* psz);
    


  • Ich weiß nicht ob der Cast Operator irgendwas mit dem Constructor der CString Klasse zu tun hat (...oder irgendwelcher anderen Klasse die Casted werden soll...).

    Ich habe mir da immer gedacht, dass wenn man fundamentale data Typen Casted, muss nur die anzahl der Bytes dieser Variablen übereinstimmen (...sonst gibt es Dataverluste...).

    Die CString Klasse beinhalted sowieso nur einen Pointer zu char (sonst nichts anderes), und somit kommt es dann nicht zu irgendwelchen Verlusten - werde ich mal so sagen...

    trotzdem bin ich mir da überhaupt nicht so sicher... Ich bin mir nur sicher, dass es nicht das selbe ist wenn man Klassen in andere Klassen Casten will... Da muss man ins reinterpret_cast, dynamic_cast oder static_cast shauen...

    MEHR DATA!!!



  • CString tmp; 
    tmp=(CString)lptstr;
    

    oder

    CString tmp; 
    tmp=lptstr;
    

    oder

    CString tmp(lptstr);
    

    ------

    CString tmp;
    tmp=(CString)lptstr;
    

    was meiner meinung nach hier passiert:
    -temporärer cstring mit lptstr im kontruktor wird erzeugt
    -operator = von tmp mit dem temporären cstring wird aufgerufen
    -destuktor des temporären strings wird aufgerufen

    so gesehn is der pseudocast reine verschwendung



  • Also... Wie wäre es damit:

    char * pChr = "nekajbdjenkda";
    	CString pCStr;
    	*((int*)(&pStr)) = (int)pChr;
    

    Kein Constructor oder so 😉 Ein bischen Spaß muss sein 😉



  • um die sache jetzt auf den punkt zu bringen, was habe ich gelernt?
    der cast ist nichts anderes als eine werteübergabe. nur müssen dafür spezielle methoden, konstruktor überladene operatoren etc... zur verfügung stehen...
    ist das jetzt richtig oder habe ich es immernoch nit geschnallt???

    falls es so ist, dann gebe ich sovok recht...


Anmelden zum Antworten