Liešanas operatori tiek izmantoti tipa liešanai C++ valodā. Tos izmanto, lai pārveidotu vienu datu tipu citā. C++ atbalsta četru veidu apraides:
- static_cast
- dinamiskā_apraide
- const_cast
- reinterpret_cast
1. static_cast
The static_cast operators ir visbiežāk izmantotais liešanas operators C++. Tas veic kompilēšanas laika tipa pārveidošanu un galvenokārt tiek izmantots tiešiem pārveidojumiem, kurus kompilators uzskata par drošiem.
java vs c++
Static_cast sintakse
static_cast < new_type>(izteiksme);>>kur,
- izteiksme: Dati, kas jāpārvērš.
- new_type: Vēlamais izteiksmes veids
Static_cast var izmantot, lai konvertētu starp saistītiem veidiem, piemēram, ciparu tipiem vai norādes tajā pašā mantojuma hierarhijā.
Static_cast piemērs
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(skaits); // drukāšanas datu tips cout<< typeid(num).name() << endl; // typecasting cout << typeid(static_cast(skaits)).nosaukums()<< endl; // printing double type t cout << typeid(numDouble).name() << endl; return 0; }> Izvade
2. dynamic_cast
The dinamiskā_apraide operators galvenokārt tiek izmantots, lai veiktu lejupslīdi (pārveidojot bāzes klases rādītāju/atsauci par atvasinātu klasi). Tas nodrošina tipa drošību, veicot izpildlaika pārbaudi, lai pārbaudītu konvertēšanas derīgumu.
Dynamic_cast sintakse
dynamic_cast < new_type>(izteiksme);>>
Ja konvertēšana nav iespējama, dinamiskā_apraide atgriežas a nulles rādītājs (rādītāja konvertēšanai) vai met a bad_cast izņēmums (atsauces reklāmguvumiem).
Dynamic_cast piemērs
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(dzīvnieku Ptr); // pārbauda, vai tipa apraide ir veiksmīga if (dogPtr) { dogPtr->speak(); } cits { cout<< 'Failed to cast to Dog.' << endl; } // typecasting to other dervied class Cat* catPtr = dynamic_cast(dzīvnieku Ptr); if (catPtr) { catPtr-> runāt(); } cits { cout<< 'Failed to cast to Cat.' << endl; } delete animalPtr; return 0; }> Izvade
mest izņēmumu apstrādi java
3. const_cast
The const_cast operators tiek izmantots, lai modificētu mainīgā lieluma const vai nepastāvīgo kvalifikatoru. Tas ļauj programmētājiem uz laiku noņemt objekta noturību un veikt izmaiņas. Lietojot const_cast, jāievēro piesardzība, jo objekta const modificēšana var izraisīt nedefinētu darbību.
Const_cast sintakse
const_cast < new_type>(izteiksme);>>
Const_cast piemērs
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; }> Izvade
4. reinterpret_cast
The reinterpret_cast operators tiek izmantots, lai pārvērstu rādītāju par jebkura cita veida rādītāju. Tas neveic nekādu pārbaudi, vai konvertētais rādītājs ir tāda paša veida vai nē.
Reinterpret_cast sintakse
reinterpret_cast < new_type>(izteiksme);>>
Piemērs
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(numberPointer); // Atmiņas adrešu un vērtību drukāšana cout<< 'Integer Address: ' << numberPointer << endl; cout << 'Char Address: ' << reinterpret_cast(charPointer)<< endl; return 0; }> Izvade
Piezīme: Const_cast un reinterpret_cast parasti nav ieteicami, jo tie ir neaizsargāti pret dažāda veida kļūdām.