Implicit conversion -> เราไม่ต้องกำหนด operation ในการ cast ใดๆ ทั้งสิ้น แต่จะเปลี่ยนโดยอัตโนมัติเมื่อค่าได้ ถูก คัดลอกไปในtypeที่เข้ากันได้ ซึ่งมีมาตรฐานในการแปลงซึ่งจะมีผลต่อพวก datatype พื้นฐานหรือ พวกการแปลงpointer ซึ่งอาจทำให้ค่าอาจสูญหายเช่น ทศนิยมขึ่นอยู่กับ การ implement ของ type พื้นฐาน
Explicit conversion ->เป็นการ แปลง type ที่มีการตีความของค่าที่ีแตกต่าง มี2แบบคือ
-แบบ c-like cast
b = (int)a;
-แบบ functional
b=int(a);
เนื่องจากการ conversion ระหว่าง class อาจทำได้อย่างถูก syntax แต่ิอาจจะไม่ compatible กันก็อาจทำให้ผลลัพธ์ไม่เป็นไปตามที่ต้องการได้ จึงได้มีการควบคุมการcasting ดังนี้
- dynamic_cast ::
อันนี้จะใช้กับ pointer และ reference ไปยัง object เท่านั้น เอาไว้ cast คลาสไปยัง base class
ซึ่งหากมีการ casting โดยไม่เป็นไปตาม derived to base จะฟ้องระหว่าง compile นอกจากว่า เป็น polimorphic กัน(มีการ overriding +inheritance + ใช้ตัวชี้แม่ ไปยังหน่วยความจำตัวลูก)
-static_cast :: สำหรับ static cast นี้ สามารถใช้ในการ conversion ระหว่าง pointer ได้โดยไม่จำเป็นที่จะต้องเป็นแบบ derived to base แต่มันไม่ค่อยปลอดภัยในการตรวจสอบ ซึ่งขึ้นอยู่กับดุลยพินิจของ programmer เอง สามารถใช้ในการ conversion ระหว่าง ตัวแปรแบบพื้นฐานที่เป็นแบบ implicit มากกว่า
และยังไม่มีการตรวจสอบในขณะรันไทม์ ด้่วย เช่น
|
|
-reinterpret_cast ::ใช้ในการแปลงจาก ทุก pointer typeไปยัง pointer type อื่นที่ำไม่มีึความสัมพันธ์กับ
class ซึ่งผลลัพธ์จาการ cast จะเป็น binary value จากหนึ่ง pointer ไปยัง อีก pointer หนึ่งซึ่งจะขึ้นอยู่กับ
platform นั้นไม่สามารถ เคลื่อนย้ายไประบบอื่นได้
-const_cast ::ใช้สำหรับcast จาก const ไปยังที่ที่คาดหวังว่าจะต้องเป็น non- const
เราสามารถใช้ type_id ซึ่งอยู่ใน
class A{};
A *a=new A();
typeid(a).name();
ไม่มีความคิดเห็น:
แสดงความคิดเห็น