So konvertieren Sie Datentypen in C++

So Konvertieren Sie Datentypen In C



Der Vorgang der Änderung des Datentyps einer Variablen in eine andere wird in C++ als Typkonvertierung oder Typumwandlung bezeichnet. Dies geschieht, um mathematische Operationen an Variablen unterschiedlicher Datentypen durchzuführen, indem deren Datentypen miteinander kompatibel gemacht werden. Die Typkonvertierung optimiert den Code. Wenn beispielsweise bei der Berechnung der Differenz zwischen zwei Variablen eine Zahl vom Float-Typ und die andere vom Integer-Datentyp ist, wird der Integer-Datentyp in den Float-Typ konvertiert, um die Subtraktion durchzuführen.

So konvertieren Sie Datentypen in C++

In C++ gibt es zwei Möglichkeiten, Datentypen zu ändern:

Implizite Typkonvertierung

Gemäß den vordefinierten Regeln des C++-Code-Compilers ist die implizite Typkonvertierung die Typkonvertierung, die vom Compiler automatisch durchgeführt wird, ohne dass ein externer Auslöser seitens des Benutzers erforderlich ist. Diese Art der Konvertierung findet normalerweise in einem Programm statt, wenn mehr als ein Datentyp vorhanden ist und der Datentyp des Ausdrucks nicht mit dem Datentyp der an diesem Ausdruck beteiligten Variablen übereinstimmt.







Um Datenverluste während der Konvertierung zu vermeiden, ändert der Compiler standardmäßig den Datentyp mit niedriger Genauigkeit durch den Datentyp mit höherer Genauigkeit. Beispielsweise wird eine Ganzzahl in eine Gleitkommazahl konvertiert, anstatt die Gleitkommazahl in eine Ganzzahl umzuwandeln, um Datenverlust zu verhindern. Dies nennt man Werbung. Nachfolgend finden Sie das Prioritätsdiagramm für die verschiedenen Datentypen.





Auftrag zur Typumwandlung

Die richtige Reihenfolge für die Typkonvertierung lautet wie folgt:





bool -- > char -- > kurzes int -- > int -- > unsigned int -- > lang -- > unsigned long -- > lang Lang -- > schweben -- > doppelt -- > langes Doppel

Die Variable vom Typ mit niedriger Genauigkeit wird in den Datentyp mit hoher Genauigkeit konvertiert, um Datenverlust zu verhindern.

Beispiel 1

In diesem Beispiel wird die Addition an Variablen unterschiedlicher Datentypen mithilfe der impliziten Typkonvertierung durchgeführt.



#include
verwenden Namensraum std ;

int hauptsächlich ( ) {
int Nummer = 100 ;
verkohlen Charakter = 'C' ;
cout << '100 + 'C' = ' << Nummer + Charakter << endl ;

schweben val = Nummer + 'C' ;
cout << 'float val(100 + 'c') = ' << val << endl ;

int War = 7890 ;
lang war nicht = War ;
cout << 'var_int = ' << war nicht ;
zurückkehren 0 ;
}

Hier werden eine Ganzzahl und ein Zeichen aus der ASCII-Tabelle sowie eine Gleitkommazahl und das Zeichen „c“ hinzugefügt. Die Ganzzahl wird im dritten Segment als langer Datentyp gehalten und die Datentypen werden vom Compiler selbst basierend auf seinen vordefinierten Regeln geändert.

Die Summe von 100 und „C“ ergibt 167, da „C“ in Zahlen 67 entspricht, und 100+ „c“ ergibt 199, da „c“ in Kleinbuchstaben 99 entspricht. Die int-Variable wird in einem langen Datentyp gespeichert.

Beispiel 2

In diesem Beispiel wird das Zeichen D in eine Gleitkommazahl umgewandelt, um die Divisionsoperation durchzuführen.

#include
verwenden Namensraum std ;

int hauptsächlich ( ) {
verkohlen X = 'D' ;

schweben float_var ;

float_var = schweben ( X ) / 'C' ;
// Explizites Konvertieren eines Int in einen Float.

cout << „Der Wert von float_var ist:“ << float_var << endl ;

zurückkehren 0 ;
}

Der Eingabewert hat die Form des Zeichens D, das im Float-Datentyp gespeichert und weiter durch das Zeichen C dividiert wird. Diese Zeichen werden in numerische Werte umgewandelt und eine Divisionsoperation wird an ihnen durchgeführt, wodurch der Wert im Float-Format zurückgegeben wird.

Explizite Typkonvertierung

Der Benutzer muss den Datentyp manuell mit der expliziten Typkonvertierung von C++ ändern, die oft als Typumwandlung bezeichnet wird. Diese Art der Umwandlung wird durchgeführt, um die implizite Typkonvertierung zu vermeiden. Es gibt zwei Methoden, um eine explizite Typumwandlung in C++ durchzuführen:

  • Konvertierung mit dem Zuweisungsoperator
  • Konvertierung mit dem Cast-Operator

Typkonvertierung mit dem Zuweisungsoperator in C++

Die Typkonvertierung mit dem Zuweisungsoperator erfolgt zwangsweise, d. h. ein Datentyp wird manuell in einen anderen konvertiert. Dies wird durch die Verwendung des Zuweisungsoperators „=“ erreicht, der den Wert des rechten Operanden der Variablen auf seiner linken Seite zuweist.

Beispiel
Dieses Programm berechnet die Fläche des Kreises mittels Typumwandlung.

#include
#include
verwenden Namensraum std ;
int hauptsächlich ( )
{
int Radius ;
cout <> Radius ;
schweben Bereich = M_PI * Radius * Radius ;
cout << „Kreisfläche mit Radius“ << Radius << ' = ' << Bereich ;
}

Der Zuweisungsoperator wird verwendet, um dem Bereich den Gleitkommawert zuzuweisen, der aus dem Wert des Radius im ganzzahligen Datentyp besteht.

Die Fläche des Kreises wird im Float-Datentyp zurückgegeben, während der Radius im Integer-Datentyp eingegeben wird. Somit wird der Datentyp der Variablen durch Typumwandlung mit dem Zuweisungsoperator geändert.

Typkonvertierung mit dem Cast-Operator in C++

Die Typkonvertierung erfolgt mithilfe eines Umwandlungsoperators, der je nach den Anforderungen des Programms die Änderung eines Datentyps in einen anderen Typ erzwingt.

Es gibt vier verschiedene Cast-Operatoren:

  • static_cast
  • const_cast
  • dynamischer_cast
  • reinterpret_cast

1: static_cast

Der static_cast ist der Umwandlungsoperator, der verwendet wird, um Gleitkommazahlen und Zeichen explizit in Ganzzahlen usw. umzuwandeln. Dies ist der einfachste Cast-Operator. Es kann Datentypen mit ähnlicher Natur umwandeln. Es kann Zeiger von einer Form in eine andere umwandeln und kann daher auch zur Speicherverwaltung verwendet werden.

Syntax

static_cast ( Ausdruck )

Beispiel
Dieses Programm wurde entwickelt, um eine Double-Variable mithilfe von static_cast in einen int-Datentyp umzuwandeln. Dadurch wird jeder Dezimalteil in der Ausgabe abgeschnitten.

#include
verwenden Namensraum std ;
int hauptsächlich ( )
{
// eine Variable deklarieren
doppelt P ;
P = 2.905 * 1.235 * 24.675 ;
schweben Ergebnis ;

cout << „Vor der Verwendung der statischen Besetzung:“ << endl ;
cout << „Der Wert von p =“ << P << endl ;

// Verwenden Sie den static_cast, um den Datentyp zu konvertieren
Ergebnis = static_cast ( P ) ;
cout << „ Nach Verwendung der statischen Umwandlung: „ << endl ;
cout << ' Der Wert von result = ' << Ergebnis << endl ;

zurückkehren 0 ;
}

Zunächst wird eine Double-Variable p mit Werten geladen, die miteinander multipliziert und im Ergebnis gespeichert werden. Das Ergebnis enthält das Ergebnis vor und nach dem static_cast-Operator:

Vor der Verwendung des static_cast-Operators wird das Ergebnis in Dezimalpunkten angezeigt, während es nach Verwendung dieses Operators im Datentyp Integer angezeigt wird.

2: const_cast

Der const_cast-Operator wird verwendet, um einen konstanten Wert eines Objekts in den nicht konstanten Typ umzuwandeln. Es wird verwendet, wenn ein konstantes Objekt deklariert wird und wir seinen Wert gelegentlich ändern müssen.

Syntax

const_cast ( Ausdruck )

Beispiel
In diesem Beispiel wird der const_cast-Operator verwendet, um den Konstantenqualifizierer vorübergehend zu entfernen und es zu ermöglichen, je nach Bedarf Änderungen an der Variablen vorzunehmen:

#include
verwenden Namensraum std ;
int hauptsächlich ( ) {
const int X = 70 ;
const int * Und = & X ;
cout << „Alter Wert ist“ << * Und << ' \N ' ;
int * Mit = const_cast ( Und ) ;
* Mit = 90 ;
cout << „Neuer Wert ist“ << * Und ;
zurückkehren 0 ;
}

Der konstante Qualifizierer wird einer int-Variablen x zugewiesen, was bedeutet, dass diese Variable nicht direkt geändert werden kann. Danach wird int *y, ein Zeiger, für den Zugriff auf x verwendet, kann aber immer noch nicht geändert werden und sein ursprünglicher Wert wird mit cout angezeigt. Mit dem const_cast-Operator wird ein Zeiger z erstellt, der nicht konstant ist. Er wird verwendet, um auf den Wert von x zuzugreifen und ihn bearbeitbar zu machen. Es ändert den z zugewiesenen Wert um 90, was indirekt den Wert in x ändert.

Anfänglich beträgt der Wert der Konstantenvariablen x 70, der mithilfe des const_cast-Operators auf 90 geändert wird.

3: dynamischer_cast

mit der Hierarchie der Vererbung, die auch als typsicherer Downcast bezeichnet wird. Beim Downcasting wird eine Referenz oder ein Zeiger von einer Referenz oder einem Zeiger einer Basisklasse in eine abgeleitete Klasse konvertiert.

Syntax

dynamischer_cast ( Ausdruck )

Beispiel
In diesem Beispiel wird der Operator „dynamic_cast“ verwendet, um den Typ der polymorphen Klasse zu überprüfen, und er ermöglicht den Zugriff sowohl auf Basis- als auch auf abgeleitete Klassenmitglieder.

#include
#include
verwenden Namensraum std ;
Klasse TBase
{
öffentlich :
schweben base_g = 9,81 ;

virtuell Leere Dummy ( )
{

} ;
} ;

Klasse TDerived : öffentlich TBase
{
öffentlich :
int local_g = 9,78 ;
} ;

int hauptsächlich ( )
{

TBase * Base = neu TDerived ;
TDerived * abgeleitet ;

abgeleitet = dynamischer_cast ( Base ) ;

cout < base_g << endl ;
cout < local_g << endl ;

getchar ( ) ;
zurückkehren 0 ;
}

Zwei Klassen werden als Basis- und abgeleitete Klassen definiert. Eine Zeigerbasis vom Typ TBase* wird erstellt und einem dynamisch zugewiesenen Objekt vom Typ TDerived zugewiesen. In diesem Fall des Polymorphismus kann einem Basisklassenzeiger ein abgeleitetes Klassenobjekt zugewiesen werden. Der dynamische_Cast prüft, ob der Zeiger auf das gültige Objekt von TDerived zugreift. Wenn die Umwandlung ein erfolgreiches Ergebnis erhält, erhält die abgeleitete Klasse ein gültiges Ergebnis, andernfalls gibt sie einen Nullwert zurück.

4: reinterpret_cast

Der reinterpret_cast wandelt einen Zeiger eines Datentyps in einen Zeiger eines anderen Datentyps um. Es wird nicht geprüft, ob die Datentypen der Zeiger gleich sind oder nicht. Dieser Gießoperator muss sorgfältig verwendet und gehandhabt werden.

Beispiel
In dieser Abbildung wird der Zeiger eines Datentyps mithilfe des reinterpret_cast in einen Zeiger eines anderen Datentyps uminterpretiert:

#include
verwenden Namensraum std ;

int hauptsächlich ( )
{
int * Q = neu int ( 70 ) ;
verkohlen * CH = reinterpret_cast ( Q ) ;
cout << * Q << endl ;
cout << * CH << endl ;
cout << Q << endl ;
cout << CH << endl ;
zurückkehren 0 ;
}

Zunächst wird eine Ganzzahl mit dem Wert 70 zugewiesen. Der Zeiger q zeigt auf diese dynamisch zugewiesene Ganzzahl. Der reinterpret_cast wird verwendet, um den Zeiger q als Zeichenzeiger ch neu zu interpretieren, was bedeutet, dass der ursprünglich q zugewiesene Speicher nun so behandelt wird, als wäre es ein Zeichen. Mit dem Befehl cout wird der Wert ausgegeben, der q und ch zugewiesen ist. Da ch als Zeichenzeiger behandelt wird, wird ein Zeichenwert zurückgegeben.

Es gibt den Wert aus, der mit *ch auf ch zeigt. Da ch jedoch als Zeichenzeiger behandelt wird, interpretiert diese Zeile den Speicher als Zeichen. Es gibt die im Zeiger ch gespeicherte Speicheradresse mit ch aus. Dies ist dieselbe Speicheradresse wie q, da es sich lediglich um eine Neuinterpretation desselben Speichers handelt.

Zunächst speichert die Ganzzahl 70. Später wird diese zwischen dem Zeiger q und dem Zeiger ch manipuliert. Die Ausgaben 2 und 4 sind gleich, da der zweite Wert mit reinterpret_cast neu interpretiert wird.

Notiz : Es wird empfohlen, diesen Cast-Operator erst dann zu verwenden, wenn er dringend benötigt wird, da das Objekt dadurch zu einem nicht tragbaren Produkt wird

Abschluss

Der Vorgang der Änderung des Datentyps einer Variablen in eine andere wird in C++ als Typkonvertierung oder Typumwandlung bezeichnet. Dies geschieht, um mathematische Operationen an Variablen unterschiedlicher Datentypen durchzuführen, indem deren Datentypen miteinander kompatibel gemacht werden. Die Typkonvertierung optimiert den Code. In C++ gibt es implizite und explizite Typkonvertierungen. Die implizite Typkonvertierung wird vom Compiler selbst mithilfe eines vordefinierten Regelsatzes durchgeführt, während die explizite Typkonvertierung vom Programmierer mithilfe von Zuweisungsoperatoren und Umwandlungsoperatoren durchgeführt wird.