Els operadors de càsting s'utilitzen per al càsting de tipus en C++. S'utilitzen per convertir un tipus de dades a un altre. C++ admet quatre tipus de càlculs:
nick pulos llamp negre
- static_cast
- dynamic_cast
- const_cast
- reinterpretar_cast
1. static_cast
El static_cast operador és l'operador de càsting més utilitzat en C++. Realitza una conversió de tipus en temps de compilació i s'utilitza principalment per a conversions explícites que el compilador considera segures.
Sintaxi de static_cast
static_cast < new_type>(expressió);>>>on,
- expressió: Dades a convertir.
- nou_tipus: Tipus d'expressió desitjat
El static_cast es pot utilitzar per convertir entre tipus relacionats, com ara tipus numèrics o punters a la mateixa jerarquia d'herència.
Exemple de static_cast
C++ // C++ program to illustrate the static_cast #include #include using namespace std; int main() { int num = 10; // converting int to double double numDouble = static_cast(núm); // imprimint el tipus de dades cout<< typeid(num).name() << endl; // typecasting cout << typeid(static_cast(número)).nom()<< endl; // printing double type t cout << typeid(numDouble).name() << endl; return 0; }> Sortida
2. dynamic_cast
El dynamic_cast L'operador s'utilitza principalment per realitzar downcasting (convertir un punter/referència d'una classe base en una classe derivada). Assegura la seguretat del tipus realitzant una comprovació en temps d'execució per verificar la validesa de la conversió.
Sintaxi de dynamic_cast
dynamic_cast < new_type>(expressió);>>>
Si la conversió no és possible, dynamic_cast torna a punter nul (per a conversions de punter) o llança a excepció bad_cast (per a conversions de referència).
matemàtiques aleatòries java aleatòries
Exemple de dynamic_cast
C++ // C++ program to illustrate the dynamic_cast #include using namespace std; // Base Class class Animal { public: virtual void speak() const { cout << 'Animal speaks.' << endl; } }; // Derived Class class Dog : public Animal { public: void speak() const override { cout << 'Dog barks.' << endl; } }; // Derived Class class Cat : public Animal { public: void speak() const override { cout << 'Cat meows.' << endl; } }; int main() { // base class pointer to derived class object Animal* animalPtr = new Dog(); // downcasting Dog* dogPtr = dynamic_cast(animalPtr); // comprovant si el typecasting és correcte if (dogPtr) { dogPtr->speak(); } else { cout<< 'Failed to cast to Dog.' << endl; } // typecasting to other dervied class Cat* catPtr = dynamic_cast(animalPtr); if (catPtr) { catPtr->parla(); } else { cout<< 'Failed to cast to Cat.' << endl; } delete animalPtr; return 0; }> Sortida
3. const_cast
El const_cast L'operador s'utilitza per modificar el qualificador const o volàtil d'una variable. Permet als programadors eliminar temporalment la constància d'un objecte i fer modificacions. S'ha de tenir precaució quan s'utilitza const_cast, ja que modificar un objecte const pot provocar un comportament no definit.
Sintaxi per const_cast
const_cast < new_type>(expressió);>>>
Exemple de const_cast
C++ // C++ program to illustrate the const_cast #include using namespace std; int main() { const int number = 5; // Pointer to a const int const int* ptr = &number; // int* nonConstPtr = ptr; if we use this // instead of without using const_cast // we will get error of invalid conversion int* nonConstPtr = const_cast (ptr); *nonConstPtr = 10; cout<< 'Modified number: ' << *nonConstPtr; return 0; }> Sortida
4. reinterpretar_cast
El operador reinterpretat_cast s'utilitza per convertir el punter a qualsevol altre tipus de punter. No realitza cap comprovació de si el punter convertit és del mateix tipus o no.
Sintaxi de reinterpretar_cast
reinterpret_cast < new_type>(expressió);>>>
Exemple
C++ // C++ program to illustrate the reinterpret_cast #include using namespace std; int main() { int number = 10; // Store the address of number in numberPointer int* numberPointer = &number; // Reinterpreting the pointer as a char pointer char* charPointer = reinterpret_cast(númeroApuntador); // Imprimeix les adreces de memòria i els valors cout<< 'Integer Address: ' << numberPointer << endl; cout << 'Char Address: ' << reinterpret_cast(charPointer)<< endl; return 0; }> Sortida
Nota: const_cast i reinterpret_cast generalment no es recomanen, ja que són vulnerables a diferents tipus d'errors.