Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Dynamic_cast และ static_cast ใน C ++


static_cast: ใช้สำหรับการแปลงประเภทปกติ/ธรรมดา นี่ยังเป็นนักแสดงที่รับผิดชอบสำหรับการบีบบังคับแบบโดยปริยายและยังสามารถเรียกได้อย่างชัดเจน คุณควรใช้ในกรณีเช่นการแปลง float เป็น int, char เป็น int เป็นต้น ซึ่งสามารถสร้างคลาสที่เกี่ยวข้องได้ หากประเภทไม่เหมือนกันจะทำให้เกิดข้อผิดพลาดบางอย่าง

ตัวอย่าง

#include<iostream>
using namespace std;
class Base {};
class Derived : public Base {};
class MyClass {};
main(){
   Derived* d = new Derived;
   Base* b = static_cast<Base*>(d); // this line will work properly
   MyClass* x = static_cast<MyClass*>(d); // ERROR will be generated during compilation
}

ผลลัพธ์

[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'

ไดนามิก_คาสต์ :คาสต์นี้ใช้สำหรับจัดการกับความหลากหลาย คุณจำเป็นต้องใช้เมื่อคุณส่งไปยังคลาสที่ได้รับเท่านั้น ใช้เฉพาะในการสืบทอดเมื่อคุณใช้จากคลาสพื้นฐานเป็นคลาสที่ได้รับ

ตัวอย่าง

#include<iostream>
using namespace std;
class MyClass1 {
   public:
      virtual void print()const {
         cout << "This is from MyClass1\n";
      }
};
class MyClass2 {
   public:
      virtual void print()const {
         cout << "This is from MyClass2\n";
      }
};
class MyClass3: public MyClass1, public MyClass2 {
   public:
      void print()const {
         cout << "This is from MyClass3\n";
      }
};
int main(){
   MyClass1* a = new MyClass1;
   MyClass2* b = new MyClass2;
   MyClass3* c = new MyClass3;
   a -> print();
   b -> print();
   c -> print();
   b = dynamic_cast< MyClass2*>(a); //This cast will be failed
   if (b)
      b->print();
   else
      cout << "no MyClass2\n";
   a = c;
   a -> print(); //Printing from MyClass3
   b = dynamic_cast< MyClass2*>(a); //Successfully casting is done
   if (b)
      b -> print();
   else
      cout << "no MyClass2\n";
}

ผลลัพธ์

This is from MyClass1
This is from MyClass2
This is from MyClass3
no MyClass2
This is from MyClass3
This is from MyClass3