Tilldelning av variabler

Nu har vi sett hur man deklarerar datatyper, så nu är det dags att se på hur man kan tilldela dem värden också. C++ är följer även i detta avseende normal praxis. En allmän tilldelning ser ut som nedan:

variabel1 = värde1;
variabel2 = variabel3;
datatyp variabel4 = värde2;

Man använder sig således av = för tilldelning. En variabel kan tilldelas ett värde av en annan variabel eller ett konstant värde.

int Index1, Tal;
char Tecken;
Index = 10;
Tal = Index;
Tecken = 'C';

Man kan även direkt tilldela en variabel som deklareras ett värde, vilket kan vara praktiskt då man deklarerar variabler mitt i en funktion:

double TmpSumma = Summa1 + Tal * AnnatTal;
char Default = '1';

Typkonvertering

Ibland kan det vara nödvändigt att kunna konvertera mellan olika datatyper. Detta går även att göra i C++, men några undantag och problem. Man kan syntaktiskt korrekt tilldela en variabel av en viss datatyp värdet av en variabel av nästan vilken annan datatyp som helst. Undantaget här är strängar. Det är helt korrekt att tilldela en double värdet på en float, en long värdet på en int o.s.v. Om man konverterar heltal till flyttal och tvärtom kan vissa problem förekomma. Om ett heltal tilldelas värdet av ett flyttal kommer decimaldelen att helt enkelt kapas av. Ingen avrundning förekommer. Tvärtom är för det mesta ok. Om flyttalet är väldigt stort och heltalsdelen inte ryms i heltalstypen är resultatet odefinierat.

Om man tilldelar värdet på en variabel till en variabel av en mindre datatyp, t.ex. int till char kan man få problem. I sådana fall kopieras endast de bitar som ryms i resultatvariablen, och resultatet är numeriskt sällan vad som avses. Det är dock alltid ok att konvertera till en större typ.

C++ sköter om att automatiskt konvertera operander i t.ex. en aritmetisk opertion till en korrekt typ. Om t.ex. två tal adderas och det ena är en float och det andra en int konverteras även den andra till float. Ibland kan man dock vilja göra en manuell explicit typkonvertering. Det gör man genom att skriva en parentes framför variabeln man vill konvertera och i parentesen skriva den önskade typen. Allmänt ser det ut så här:

resultattyp variabel1 = (resultattyp)variabel2

Några exempel:

int Heltal = 10;
float Flyttal = 3.2;
char Tecken = 'w';
int Varde = (int)Tecken;
Flyttal = (float)Heltal;
Heltal = (int)Flyttal;    // förlust av decimaler!

I normala fall bör man undvika typkonverteringar för att undvika fel som kan vara svåra att hitta. Planera dina variabler istället på ett bättre sätt så klarar du dig för det mesta utan typkonverteringar!