ในบทช่วยสอนนี้ เราจะเรียนรู้เกี่ยวกับพื้นฐานของการแปลงชนิดข้อมูล C++ ด้วยความช่วยเหลือจากตัวอย่าง

C++ ช่วยให้เราสามารถแปลงชนิดข้อมูลหนึ่งเป็นอีกชนิดข้อมูลหนึ่งได้ นี้เรียกว่า Type Conversion

การแปลงชนิดข้อมูลมีสองประเภทใน C ++

  1. การแปลงโดยนัย (Implicit Conversion)
  2. การแปลงอย่างชัดเจน (Explicit Conversion) เรียกอีกอย่างว่า Type Casting


การแปลงประเภทโดยนัย (Implicit Conversion)

การแปลงประเภทที่คอมไพเลอร์ทำโดยอัตโนมัติเรียกว่าการแปลงประเภทโดยนัย การแปลงประเภทนี้เรียกอีกอย่างว่าการแปลงอัตโนมัติ

ให้เราดูตัวอย่างสองตัวอย่างของการแปลงประเภทโดยนัย


ตัวอย่างที่ 1: การแปลงจาก int เป็น double


#include <iostream>
using namespace std;

int main() {
	int num_int = 9;

	double num_double;

	num_double = num_int;

	cout << "num_int = " << num_int << endl;
	cout << "num_double = " << num_double << endl;

	return 0;
}


เอาท์พุต


ในโปรแกรม เราได้กำหนดข้อมูลของ int ให้กับตัวแปร double

num_double = num_int;


ที่นี่ int ค่าจะถูกแปลงเป็น double โดยอัตโนมัติโดยคอมไพเลอร์ ก่อนที่จะถูกกำหนดให้กับตัวแปร num_double และนี่คือตัวอย่างของการแปลงประเภทโดยนัย


ตัวอย่างที่ 2: การแปลงอัตโนมัติจาก double เป็น int


#include <iostream>
using namespace std;

int main() {

	int num_int;
	double num_double = 9.99;

	num_int = num_double;

	cout << "num_int = " << num_int << endl;
	cout << "num_double = " << num_double << endl;

	return 0;
}


เอาท์พุต


ในโปรแกรม เราได้กำหนดข้อมูล double ให้กับตัวแปร int

num_int = num_double;


ที่นี่ double ค่าจะถูกแปลงเป็น intโดยอัตโนมัติโดยคอมไพเลอร์ ก่อนที่จะถูกกำหนดให้กับตัวแปร num_int และนี่เป็นตัวอย่างของการแปลงประเภทโดยนัย

หมายเหตุ: เนื่องจาก int ไม่สามารถมีทศนิยมได้ ตัวเลขที่อยู่หลังจุดทศนิยมจะถูกตัดทอนในตัวอย่างเอาท์พุต


ข้อมูลสูญหายระหว่างการแปลง (Data Loss During Conversion)

การแปลงให้แคบลง (Narrowing Conversion)


ดังที่เราได้เห็นจากตัวอย่างข้างต้น การแปลงจากประเภทข้อมูลหนึ่งไปเป็นอีกประเภทหนึ่งมีแนวโน้มที่จะสูญเสียข้อมูล กรณีนี้เกิดขึ้นเมื่อข้อมูลประเภทที่ใหญ่กว่าถูกแปลงเป็นข้อมูลประเภทที่เล็กกว่า

ข้อมูลอาจสูญหายระหว่างการแปลงชนิด

การแปลงอย่างชัดเจน C++ Explicit Conversion

เมื่อผู้ใช้เปลี่ยนข้อมูลจากประเภทหนึ่งเป็นอีกประเภทหนึ่งด้วยตนเอง สิ่งนี้เรียกว่าการแปลงแบบชัดแจ้ง การแปลงประเภทนี้เรียกอีกอย่างว่าการหล่อแบบ (type casting)

มี 3 วิธีหลักที่เราสามารถใช้การแปลงที่ชัดเจนใน C ++ พวกเขาคือ:

  1. C-style type casting (เรียกอีกอย่างว่า cast notation )
  2. Function notation (เรียกอีกอย่างว่า old C++ style type casting )
  3. Type conversion operators


C-style type casting

เป็นชื่อ C-style type casting นี้เป็นที่ชื่นชอบโดยการเขียนโปรแกรมภาษา C

ไวยากรณ์สำหรับสไตล์นี้คือ:

(data_type)expression;


ตัวอย่างเช่น,

// การเริ่มต้นตัวแปร int
int num_int = 26;

// ประกาศตัวแปร double
double num_double;

// แปลงจาก int เป็น double
num_double = (double)num_int;


Function-style Casting


นอกจากนี้เรายังสามารถใช้ฟังก์ชันเช่น notation เพื่อส่งข้อมูลจากประเภทหนึ่งไปยังอีกประเภทหนึ่ง

ไวยากรณ์สำหรับสไตล์นี้คือ:

data_type(expression);


ตัวอย่างเช่น,

// การเริ่มต้นตัวแปร int
int num_int = 26;

// ประกาศตัวแปร double
double num_double;

// แปลงจาก int เป็น double
num_double = double(num_int);


ตัวอย่างที่ 3: Type Casting


#include <iostream>

using namespace std;

int main() {
    // initializing a double variable
    double num_double = 3.56;
    cout << "num_double = " << num_double << endl;

    // C-style conversion from double to int
    int num_int1 = (int)num_double;
    cout << "num_int1   = " << num_int1 << endl;

    // function-style conversion from double to int
    int num_int2 = int(num_double);
    cout << "num_int2   = " << num_int2 << endl;

    return 0;
}


เอาท์พุต

เราใช้ทั้ง C style type conversion และ function-style casting for type conversion และแสดงผล เนื่องจากพวกเขาทำงานเดียวกัน ทั้งคู่จึงให้ผลลัพธ์ที่เหมือนกัน


Type Conversion Operators


นอกจากการทำงานทั้ง 2 ประเภทนี้แล้ว C ++ ยังมีตัวดำเนินการ 4 ตัว สำหรับการแปลงชนิดข้อมูล พวกเขาเป็นที่รู้จักในฐานะ operators for type conversion พวกเขาคือ:

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast


เราจะเรียนรู้เกี่ยวกับนักแสดงเหล่านี้ในบทช่วยสอนในภายหลัง

Leave a Reply

Your email address will not be published. Required fields are marked *