Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Typkonvertering i C++

Postad 2009-09-01 av Pär Häggblad i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 2445, Betyg: 0%

Förord

En liten artikel om hur man skall använda sig av de 4 typkonverterarna (type cast) operatorerna i C++.
Innehåll
  » Typkonvertering i C++


Typkonvertering i C++


Då och då behöver man konvertera(type casta) sina objekt i C++.
Som bekant kan man tex göra detta:

int a;
long int b;

a = int(b);

Vilket konverterar en long int double till en int och trunkerar innehållet i b (vilket i princip innebär att de översta 32 bitarna kastas bort i b).

ANSI C++ standarden har definerat 4 stycken konverterings(casting) operatorer 'reinterpret_cast', 'static_cast', 'dynamic_cast' och 'const_cast'
för att man skall få bättre kontroll över casting förfarandet. Vilket egentligen innebär att man på ett enkelt sätt via tex. sökning
skall kunna se i koden när man gör en type cast.

Jag tänkte gå igenom dessa olika operatorer och förklara vad de är samt när de bör användas.

reinterpret_cast


Syntax: reinterpret_cast(expression)
Begränsning: Kan ej användas till att konvertera mellan två klasspekare som är relaterade utav arv samt casta från const(vilket const_cast skall användas till).
Förklaring: Konverterar en pekare till vilken typ av pekare som helst samt pekare till integer och tvärtom.
Denna operator beter sig precis som vanlig type casting gör, dvs innehållet som konverteras verifieras inte på något sätt.
Konverterar man från en pekare till en integer så sker detta genom kopiering utav värdet.

Exempel:

En funktion som tar en void pekare som argument.


void MyClassA::Function1(void *aTemp)
{
MyClassB *a;
a = reinterpret_cast(aTemp);
}



static_cast


Syntax: static_cast(expression)
Förklaring:
Konverterar en pekare mellan relaterad klasser. Förälderklassen till ärvda klasser och vice versa.
Kan ej användas till att konvertera mellan två klasspekare som inte är relaterade via arv med varandra.
Samt ingen verifiering görs som kollar om objektet som konverteras är ett fullt kompatibelt objekt med destinations objektets typ.
Detta gör att användaren måste försäkra sig om att konverteringen är "säker". Typchecken som görs för dynamic_cast görs inte här.

Exempel:



class MyClassA {};
class DervMyClassA: public MyClassA {};
MyClassA * x = new MyClassA;
DervMyClassA y = static_cast(x);


eller ett icke pekar exempel:


double d = 1.2345;
int i = static_cast(d);



dynamic_cast


Syntax: dynamic_cast(expression)
Förklaring: Syftet med dynamic_cast är att verifiera konverteringen och att resultatet är ett riktigt objekt utav den begärda klassen.
Kan enbart användas med pekare och referenser till objekt som är relaterade till varandra.


Konverteringexempel:



class MyClassA {};
class DervMyClassA: public MyClassA {};

DervMyClassA x;
MyClassA y;

y = dynamic_cast(&x); // Konverterar till basklassen.



eller ett icke pekar exempel:


double d = 1.2345;
int i = static_cast(d);



const_cast


Syntax: const_cast(expression)
Begränsning: Enbart för manipulera konstant begreppet (const) för ett objekt.
Förklaring: Som sagt enbart för att sätta eller tabort const från ett objekt.

Ett exempel är att tabort const för en sträng innan skickar den som ett argument till en funktion som kräver en icke konstant.



const char * c = "test";
print(const_cast(c));




Lycka till med konverterandet.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:10 Casinos in der Schweiz
  • 07:35 AI Presentation Platform
  • 09:54 casinos in Ireland
  • 07:11 Hjälp, byta till naturlig deo – fu
  • 13:56 Vinkkejä lainojen yhdistämiseen?
  • 14:26 Website about cricket
  • 12:24 Bästa casinobonusarna just nu, har
  • 17:31 Mostbet Bangladesh

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 574 887
28 077
260 357
7 373
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies