ค้นหาบล็อกนี้

วันเสาร์ที่ 24 เมษายน พ.ศ. 2553

Type Casting::C++

Type casting คือการแปลงจาก การกระทำของ typeไปยัง type อีกชนิดหนึ่งซึ่งมีหลายวิธีในการ Cast

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 มากกว่า
และยังไม่มีการตรวจสอบในขณะรันไทม์ ด้่วย เช่น

double d=3.14159265;

int i = static_cast<int>(d);


-reinterpret_cast ::ใช้ในการแปลงจาก ทุก pointer typeไปยัง pointer type อื่นที่ำไม่มีึความสัมพันธ์กับ
class ซึ่งผลลัพธ์จาการ cast จะเป็น binary value จากหนึ่ง pointer ไปยัง อีก pointer หนึ่งซึ่งจะขึ้นอยู่กับ
platform นั้นไม่สามารถ เคลื่อนย้ายไประบบอื่นได้

-const_cast ::ใช้สำหรับcast จาก const ไปยังที่ที่คาดหวังว่าจะต้องเป็น non- const

เราสามารถใช้ type_id ซึ่งอยู่ในในการตรวจสอบtype ได้ เช่น
class A{};

A *a=new A();
typeid(a).name();



ไม่มีความคิดเห็น:

แสดงความคิดเห็น