C++ คลาสและวัตถุพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

คลาสและอ็อบเจ็กต์ใน C++ เป็นรากฐานของการเขียนโปรแกรมเชิงวัตถุ โดยที่คลาสจะกำหนดแบบแผนของข้อมูลและฟังก์ชันสมาชิก และวัตถุคืออินสแตนซ์ที่เป็นรูปธรรมที่สร้างขึ้นจากแบบแผนนั้น

  • 🔷 แผนผังชั้นเรียน: A C++ คลาสจะรวมสมาชิกข้อมูลและฟังก์ชันสมาชิกเข้าไว้ในประเภทที่ผู้ใช้กำหนดเองประเภทเดียว
  • 🔑 ตัวแก้ไขการเข้าถึง: คำหลัก private, public และ protected ควบคุมว่าสมาชิกในคลาสสามารถเข้าถึงได้จากที่ใดบ้าง
  • 🧱 การสร้างอ็อบเจ็กต์: สามารถสร้างอ็อบเจ็กต์จากคลาสได้โดยใช้ไวยากรณ์ คลาส-ชื่อ-ชื่ออ็อบเจ็กต์
  • ???? สิทธิ์การเข้าถึงสำหรับสมาชิก: ตัวดำเนินการจุด (dot operator) ใช้สำหรับเข้าถึงสมาชิกสาธารณะ ในขณะที่ฟังก์ชันสมาชิก (member functions) ใช้สำหรับจัดการข้อมูลที่จัดเก็บไว้
  • ⚙️ ตัวสร้าง: คอนสตรัคเตอร์จะเริ่มต้นใช้งานอ็อบเจ็กต์โดยอัตโนมัติ และดีสตรัคเตอร์จะปล่อยอ็อบเจ็กต์เหล่านั้นเมื่อหมดขอบเขตการใช้งาน
  • 🤖 ความช่วยเหลือจากเอไอ: GitHub Copilot และผู้ช่วย AI ที่คล้ายกันจะสร้างโครงสร้างนิยามคลาสและคอนสตรัคเตอร์จากข้อความแสดงความคิดเห็นสั้นๆ

C++ คลาสและวัตถุ

คลาสคืออะไร?

A C++ คลาสรวมข้อมูลและวิธีการจัดการข้อมูลให้เป็นหนึ่งเดียว ชั้นเรียนยังกำหนดรูปแบบของวัตถุอีกด้วย ข้อมูลและวิธีการที่มีอยู่ในชั้นเรียนเรียกว่าสมาชิกของชั้นเรียน คลาสเป็นประเภทข้อมูลที่ผู้ใช้กำหนด ในการเข้าถึงสมาชิกชั้นเรียน เราใช้อินสแตนซ์ของชั้นเรียน คุณสามารถเห็นคลาสเป็นแบบพิมพ์เขียวสำหรับออบเจ็กต์ได้

คลาสสามารถเป็นต้นแบบของบ้านได้ มันแสดงตำแหน่งและขนาดของประตู หน้าต่าง พื้น ฯลฯ จากคำอธิบายเหล่านี้ เราสามารถสร้างบ้านได้ บ้านจึงกลายเป็นวัตถุ เราสามารถสร้างบ้านได้หลายหลังจากต้นแบบนี้ นอกจากนี้ เรายังสามารถสร้างวัตถุได้หลายชิ้นจากคลาสเดียว

C++ คลาสเป็นแบบพิมพ์เขียวสำหรับวัตถุ

ในรูปด้านบน เรามีแบบบ้านเดี่ยว จากต้นแบบนี้ เราได้สร้างบ้านสองหลังที่มีคุณสมบัติที่แตกต่างกัน

เมื่อมีแนวคิดเรื่องคลาสเป็นเหมือนพิมพ์เขียวแล้ว ขั้นตอนต่อไปคือการดูวิธีการประกาศคลาสในโค้ด

ประกาศชั้นเรียน

In C++คลาสจะถูกกำหนดโดยใช้คีย์เวิร์ด `class` ตามด้วยชื่อคลาส จากนั้นจึงเพิ่มส่วนเนื้อหาของคลาสไว้ระหว่างวงเล็บปีกกา `{ }`

วากยสัมพันธ์

class class-name
   {
   // data
   // functions
   };
  • การขอ ชื่อคลาส คือชื่อที่จะใช้กำหนดให้กับคลาส
  • การขอ ข้อมูล คือข้อมูลสำหรับคลาส ซึ่งโดยปกติจะประกาศเป็นตัวแปร
  • การขอ ฟังก์ชั่น คือฟังก์ชันของคลาส

การประกาศชื่อคลาสและโครงสร้างคลาสย่อมทำให้เกิดคำถามว่า ใครบ้างที่จะสามารถใช้งานสมาชิกแต่ละตัวได้

คำหลักส่วนตัวและสาธารณะ

คุณต้องเจอคำหลักทั้งสองนี้ พวกมันเป็นตัวดัดแปลงการเข้าถึง

ส่วนตัว:

เมื่อใช้คีย์เวิร์ดส่วนตัวเพื่อกำหนดฟังก์ชันหรือคลาส คำสำคัญจะกลายเป็นคีย์เวิร์ดส่วนตัว สามารถเข้าถึงได้จากภายในชั้นเรียนเท่านั้น

สาธารณะ:

ในทางกลับกัน คีย์เวิร์ดสาธารณะจะทำให้ข้อมูล/ฟังก์ชันเป็นแบบสาธารณะ สิ่งเหล่านี้สามารถเข้าถึงได้จากนอกชั้นเรียน

หลังจากสร้างคลาสแล้ว สามารถสร้างอ็อบเจ็กต์จากคลาสนั้นได้ เช่นเดียวกับการสร้างตัวแปรจากชนิดข้อมูล

นิยามวัตถุ

อ็อบเจ็กต์ถูกสร้างขึ้นจากคลาส อ็อบเจ็กต์ของคลาสจะถูกประกาศในลักษณะเดียวกับการประกาศตัวแปร โดยชื่อคลาสต้องมาก่อน ตามด้วยชื่ออ็อบเจ็กต์ อ็อบเจ็กต์นั้นจะมีประเภทตามคลาส

วากยสัมพันธ์

class-name object-name;
  • การขอ ชื่อคลาส คือชื่อของคลาสที่จะใช้สร้างอ็อบเจ็กต์
  • การขอ วัตถุชื่อ คือชื่อที่จะกำหนดให้กับวัตถุใหม่

กระบวนการสร้างวัตถุจากคลาสนี้เรียกว่าการสร้างอินสแตนซ์

เมื่อสร้างอ็อบเจ็กต์แล้ว สมาชิกสาธารณะของอ็อบเจ็กต์นั้นสามารถเข้าถึงได้โดยตรงผ่านตัวดำเนินการอย่างง่าย

การเข้าถึงข้อมูลสมาชิก

ในการเข้าถึงสมาชิกสาธารณะของคลาส เราใช้ตัวดำเนินการ (.)dot สมาชิกเหล่านี้ถูกทำเครื่องหมายด้วยตัวปรับแต่งการเข้าถึงสาธารณะ

1 ตัวอย่าง

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

Output:

C++ การเข้าถึงสมาชิกข้อมูลสาธารณะ ตัวอย่างที่ 1 ผลลัพธ์

นี่คือภาพหน้าจอของรหัส:

C++ การเข้าถึงสมาชิกข้อมูลสาธารณะ ตัวอย่างโค้ด 1

Code คำอธิบาย:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  3. ประกาศคลาสชื่อ Phone
  4. การใช้ตัวแก้ไขการเข้าถึงสาธารณะเพื่อทำเครื่องหมายตัวแปรที่เรากำลังจะสร้างว่าเข้าถึงได้แบบสาธารณะ
  5. ประกาศต้นทุนตัวแปรของชนิดข้อมูล double
  6. ประกาศตัวแปรจำนวนเต็มชื่อสล็อต
  7. จุดสิ้นสุดของเนื้อหาชั้นเรียน
  8. การเรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหา
  9. สร้างวัตถุชื่อ Y6 ประเภท Phone สิ่งนี้เรียกว่าการสร้างอินสแตนซ์
  10. สร้างวัตถุชื่อ Y7 ประเภท Phone สิ่งนี้เรียกว่าการสร้างอินสแตนซ์
  11. เข้าถึงต้นทุนตัวแปร/สมาชิกของคลาส Phone โดยใช้อ็อบเจ็กต์ Y6 ค่านี้ตั้งไว้ที่ 100.0 ตอนนี้ราคาของ Y6 ตั้งไว้ที่ 100.0
  12. เข้าถึงสล็อตตัวแปร/สมาชิกของคลาส Phone โดยใช้อ็อบเจ็กต์ Y6 ค่านี้ตั้งไว้ที่ 2 ช่องสำหรับ Y6 ตอนนี้ตั้งเป็น 2
  13. เข้าถึงต้นทุนตัวแปร/สมาชิกของคลาส Phone โดยใช้อ็อบเจ็กต์ Y7 ค่านี้ตั้งไว้ที่ 200.0 ตอนนี้ราคาของ Y7 ตั้งไว้ที่ 200.0
  14. เข้าถึงสล็อตตัวแปร/สมาชิกของคลาส Phone โดยใช้อ็อบเจ็กต์ Y7 ค่านี้ตั้งไว้ที่ 2 ช่องสำหรับ Y7 ตอนนี้ตั้งเป็น 2
  15. พิมพ์ราคา Y6 บนคอนโซลพร้อมกับข้อความอื่นๆ
  16. พิมพ์ราคา Y7 บนคอนโซลพร้อมกับข้อความอื่นๆ
  17. พิมพ์จำนวนช่องสำหรับ Y6 ควบคู่ไปกับข้อความอื่น
  18. พิมพ์จำนวนช่องสำหรับ Y7 ควบคู่ไปกับข้อความอื่น
  19. โปรแกรมจะต้องส่งคืนค่าเมื่อดำเนินการเสร็จสิ้น
  20. ส่วนท้ายของฟังก์ชัน main()

สมาชิกสาธารณะสามารถเข้าถึงโค้ดจากภายนอกได้ แต่สมาชิกส่วนตัวต้องปฏิบัติตามกฎการเข้าถึงที่เข้มงวดกว่ามาก

ชั้นเรียนส่วนตัวคืออะไร?

สมาชิกคลาสที่ทำเครื่องหมายว่าเป็นส่วนตัวสามารถเข้าถึงได้โดยฟังก์ชันที่กำหนดไว้ภายในคลาสเท่านั้น วัตถุหรือฟังก์ชันใด ๆ ที่กำหนดไว้นอกคลาสไม่สามารถเข้าถึงสมาชิกดังกล่าวได้โดยตรง สมาชิกคลาสส่วนตัวสามารถเข้าถึงได้โดยฟังก์ชันสมาชิกและเพื่อนเท่านั้น

2 ตัวอย่าง

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

Output:

C++ สมาชิกคลาสส่วนตัว ตัวอย่างผลลัพธ์ที่ 2

นี่คือภาพหน้าจอของรหัส:

C++ โค้ดตัวอย่างที่ 2 ของสมาชิกคลาสส่วนตัว

Code คำอธิบาย:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  3. สร้างคลาสชื่อ ClassA
  4. ใช้ตัวแก้ไขการเข้าถึงสาธารณะเพื่อทำเครื่องหมายสมาชิกชั้นเรียนที่จะสร้างให้เข้าถึงได้แบบสาธารณะ
  5. สร้างฟังก์ชันชื่อ set_a() ที่รับค่า val จำนวนเต็มหนึ่งค่า
  6. สร้างฟังก์ชันชื่อ get_a()
  7. ใช้ตัวแก้ไขการเข้าถึงส่วนตัวเพื่อทำเครื่องหมายสมาชิกคลาสที่จะสร้างว่าสามารถเข้าถึงได้แบบส่วนตัว
  8. ประกาศตัวแปรจำนวนเต็มชื่อ a
  9. จุดสิ้นสุดของเนื้อหาชั้นเรียน
  10. ใช้ชื่อคลาสและตัวดำเนินการการแก้ไขขอบเขตเพื่อเข้าถึงฟังก์ชัน get_a() เราต้องการกำหนดว่าฟังก์ชันทำอะไรเมื่อเรียกใช้
  11. ฟังก์ชัน get_a() ควรส่งคืนค่าของตัวแปร a เมื่อถูกเรียกใช้
  12. สิ้นสุดคำจำกัดความของฟังก์ชัน get_a()
  13. ใช้ชื่อคลาสและตัวดำเนินการการแก้ไขขอบเขตเพื่อเข้าถึงฟังก์ชัน set_a() เราต้องการกำหนดว่าฟังก์ชันทำอะไรเมื่อเรียกใช้
  14. การกำหนดค่าของตัวแปร val ให้กับตัวแปร a
  15. สิ้นสุดคำจำกัดความของฟังก์ชัน set_a()
  16. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  17. สร้างอินสแตนซ์ของ ClassA และตั้งชื่อให้ว่า a
  18. ใช้อินสแตนซ์คลาสด้านบนและฟังก์ชัน set_a() เพื่อกำหนดค่า 20 ให้กับตัวแปร a
  19. พิมพ์ข้อความข้างค่าของตัวแปร a บนคอนโซล ค่าของตัวแปร a ได้มาจากการเรียกใช้ฟังก์ชัน get_a()
  20. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  21. ส่วนท้ายของฟังก์ชัน main()

สมาชิกที่ได้รับการคุ้มครองอยู่ระหว่างสมาชิกส่วนตัวและสมาชิกสาธารณะ ซึ่งเป็นการเพิ่มขีดความสามารถที่สำคัญประการหนึ่งสำหรับการสืบทอดมรดก

คลาสที่ได้รับการคุ้มครองคืออะไร?

สมาชิกชั้นเรียนที่ทำเครื่องหมายว่าได้รับการคุ้มครองจะมีข้อได้เปรียบเหนือสมาชิกชั้นเรียนที่ทำเครื่องหมายว่าเป็นส่วนตัว สามารถเข้าถึงได้โดยฟังก์ชันภายในคลาสของคำจำกัดความ นอกจากนี้ยังสามารถเข้าถึงได้จากคลาสที่ได้รับ

3 ตัวอย่าง

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

Output:

C++ ตัวอย่างผลลัพธ์ของสมาชิกคลาสที่ได้รับการป้องกัน ตัวอย่างที่ 3

นี่คือภาพหน้าจอของรหัส:

C++ การสืบทอดคลาสที่ได้รับการป้องกัน ตัวอย่างที่ 3 โค้ด

Code คำอธิบาย:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  3. สร้างคลาสชื่อ ParentClass
  4. ใช้ตัวแก้ไขการเข้าถึงที่ได้รับการป้องกันเพื่อทำเครื่องหมายสมาชิกคลาสที่จะสร้างว่าได้รับการป้องกัน
  5. สร้างตัวแปรชื่อค่าจำนวนเต็ม
  6. จุดสิ้นสุดของเนื้อหาชั้นเรียน
  7. สร้างคลาสใหม่ชื่อ ChildClass ที่สืบทอด ParentClass
  8. ใช้ตัวแก้ไขการเข้าถึงที่ได้รับการป้องกันเพื่อทำเครื่องหมายสมาชิกคลาสที่จะสร้างให้เข้าถึงได้ในคลาสย่อย
  9. สร้างฟังก์ชันชื่อ setId() ซึ่งรับค่าจำนวนเต็ม x หนึ่งค่า
  10. การกำหนดค่าของตัวแปร x ให้กับค่าตัวแปร
  11. สิ้นสุดคำจำกัดความของฟังก์ชัน setId()
  12. สร้างฟังก์ชันชื่อ displayValue()
  13. พิมพ์ค่าของตัวแปรที่ระบุชื่อค่าบนคอนโซลควบคู่ไปกับข้อความอื่น
  14. ส่วนท้ายของฟังก์ชัน displayValue()
  15. ส่วนท้ายของคลาสชื่อ ChildClass
  16. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  17. สร้างอินสแตนซ์ของ ChildClass และตั้งชื่อให้ว่า c
  18. ใช้อินสแตนซ์คลาสด้านบนและฟังก์ชัน setId() เพื่อกำหนดค่า 21 ให้กับตัวแปร x
  19. ใช้อินสแตนซ์คลาสข้างต้นเพื่อเรียกใช้ฟังก์ชันชื่อ displayValue()
  20. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  21. ส่วนท้ายของฟังก์ชัน main()

นอกจากจะจัดเก็บข้อมูลแล้ว คลาสยังจัดกลุ่มฟังก์ชันที่ทำงานกับข้อมูลเหล่านั้นไว้ด้วย

ฟังก์ชั่นสมาชิกชั้นเรียน

ฟังก์ชันช่วยให้เราจัดการข้อมูลได้ ฟังก์ชันสมาชิกของคลาสสามารถกำหนดได้สองวิธี:

  • ภายในคำจำกัดความของชั้นเรียน
  • นอกคำจำกัดความของชั้นเรียน

หากต้องกำหนดฟังก์ชันภายนอกคำจำกัดความของคลาส เราต้องใช้ตัวดำเนินการการแก้ไขขอบเขต (::) โดยควรมาพร้อมกับชื่อคลาสและฟังก์ชัน

4 ตัวอย่าง

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

Output:

C++ ฟังก์ชันสมาชิกคลาส ตัวอย่างที่ 4 ผลลัพธ์

นี่คือภาพหน้าจอของรหัส:

C++ ฟังก์ชันสมาชิกคลาส ตัวอย่างโค้ด 4

Code คำอธิบาย:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโปรแกรมของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัวของสตริงในโปรแกรมของเราเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  4. สร้างคลาสชื่อ Guru99.
  5. ใช้ตัวแก้ไขการเข้าถึงสาธารณะเพื่อทำเครื่องหมายสมาชิกคลาสที่เรากำลังจะสร้างให้สามารถเข้าถึงได้จากภายนอก
  6. สร้างตัวแปรสตริงชื่อ Tutorial_name
  7. สร้างตัวแปรจำนวนเต็มชื่อ id
  8. สร้างฟังก์ชันชื่อ printname() ฟังก์ชันนี้ไม่ได้ถูกกำหนดไว้ภายในคำจำกัดความของคลาส
  9. สร้างฟังก์ชันชื่อ printid() ฟังก์ชันนี้ถูกกำหนดไว้ภายในนิยามของคลาส และส่วนเนื้อหาของฟังก์ชันก็ถูกเพิ่มไว้ภายในนิยามของคลาสเช่นกัน
  10. พิมพ์ค่าของตัวแปร id ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล โปรดทราบว่าสิ่งนี้ได้ถูกเพิ่มเข้าไปในเนื้อหาของฟังก์ชัน printid() มันจะถูกดำเนินการเมื่อมีการเรียกใช้ฟังก์ชัน printid() เท่านั้น
  11. ส่วนท้ายของฟังก์ชัน printid()
  12. จบส่วนเนื้อหาของคลาส Guru99.
  13. จุดเริ่มต้นของคำจำกัดความของฟังก์ชัน printname()
  14. พิมพ์ค่าของตัวแปร Tutorial_name บนคอนโซลควบคู่ไปกับข้อความอื่นๆ โปรดทราบว่าสิ่งนี้ได้ถูกเพิ่มเข้าไปในเนื้อหาของฟังก์ชัน printname() มันจะถูกดำเนินการเมื่อมีการเรียกใช้ฟังก์ชัน printname() เท่านั้น
  15. สิ้นสุดคำจำกัดความของฟังก์ชัน printname()
  16. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  17. สร้างอินสแตนซ์ของคลาส Guru99 และตั้งชื่อว่า guru99
  18. ใช้ตัวอย่างข้างต้นเพื่อกำหนดค่าเป็น C++ ไปที่ตัวแปร Tutorial_name
  19. ใช้อินสแตนซ์ guru99 เพื่อกำหนดค่า 1001 ให้กับรหัสตัวแปร
  20. ใช้อินสแตนซ์ guru99 เพื่อเรียกใช้ฟังก์ชัน printname()
  21. เรียกคำสั่ง end (end line) เพื่อพิมพ์บรรทัดว่างใหม่บนคอนโซล
  22. ใช้อินสแตนซ์ guru99 เพื่อเรียกใช้ฟังก์ชัน printid()
  23. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  24. ส่วนท้ายของฟังก์ชัน main()

ฟังก์ชันสมาชิกพิเศษสองฟังก์ชันจะทำงานโดยอัตโนมัติเมื่อมีการสร้างวัตถุและเมื่อมีการทำลายวัตถุ

ตัวสร้างและผู้ทำลาย

ตัวสร้างคืออะไร?

คอนสตรัคเตอร์เป็นฟังก์ชันพิเศษที่ใช้ในการเริ่มต้นค่าให้กับอ็อบเจ็กต์ C++ คอมไพเลอร์ เมื่อสร้างอ็อบเจ็กต์ เราจะเรียกใช้คอนสตรัคเตอร์ คอนสตรัคเตอร์ช่วยในการกำหนดค่าให้กับสมาชิกของคลาส แน่นอนว่าหลังจากที่ได้จัดสรรพื้นที่หน่วยความจำให้กับสมาชิกเหล่านั้นแล้ว

ตัวทำลาย (Destructor) คืออะไร?

ในทางกลับกัน Destructors ช่วยในการทำลายวัตถุของคลาส

ชื่อ Constructor ต้องคล้ายกับชื่อคลาส ตัวสร้างไม่มีประเภทการส่งคืน

ตัวสร้างสามารถกำหนดได้ภายในหรือภายนอกตัวคลาส หากกำหนดไว้ภายนอกตัวคลาส ควรกำหนดด้วยชื่อคลาสและตัวดำเนินการแก้ไขขอบเขต (::)

5 ตัวอย่าง

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

Output:

C++ ตัวสร้างและตัวทำลาย ตัวอย่างที่ 5 ผลลัพธ์

นี่คือภาพหน้าจอของรหัส:

C++ โค้ดตัวอย่างที่ 5 ของคอนสตรัคเตอร์และดีสตรัคเตอร์

Code คำอธิบาย:

  1. รวมไฟล์ส่วนหัว iostream ลงในโค้ดเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  3. สร้างคลาสชื่อ ClassA
  4. ใช้ตัวแก้ไขการเข้าถึงสาธารณะเพื่อทำเครื่องหมายสมาชิกที่เรากำลังจะสร้างว่าเข้าถึงได้แบบสาธารณะ
  5. สร้าง Constructor สำหรับชั้นเรียน
  6. ข้อความที่จะพิมพ์บนคอนโซลเมื่อมีการเรียกตัวสร้าง จุดสิ้นสุดคือ a C++ คำสำคัญซึ่งหมายถึงบรรทัดสิ้นสุด มันเลื่อนเคอร์เซอร์ของเมาส์ไปที่บรรทัดถัดไป
  7. ส่วนท้ายของตัวสร้างคลาส
  8. สร้างตัวทำลายล้างสำหรับชั้นเรียน
  9. ข้อความที่จะพิมพ์บนคอนโซลเมื่อมีการเรียก destructor จุดสิ้นสุดคือ a C++ คำสำคัญซึ่งหมายถึงบรรทัดสิ้นสุด มันเลื่อนเคอร์เซอร์ของเมาส์ไปที่บรรทัดถัดไป
  10. ส่วนปลายของตัวผู้ทำลายล้าง
  11. จุดสิ้นสุดของเนื้อหาชั้นเรียน
  12. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  13. สร้างคลาสอ็อบเจ็กต์และตั้งชื่อให้กับมันว่า a ตัวสร้างจะถูกเรียก
  14. สร้างตัวแปรจำนวนเต็มชื่อ p และกำหนดค่าเป็น 1
  15. สร้างบล็อกคำสั่ง if โดยใช้ตัวแปร p
  16. สร้างคลาสอ็อบเจ็กต์และตั้งชื่อให้ว่า b ผู้ทำลายล้างจะถูกเรียก
  17. ส่วนท้ายของคำสั่ง if
  18. ส่วนท้ายของฟังก์ชัน main()

คำถามที่พบบ่อย

คลาสคือแบบแผนที่ผู้ใช้กำหนดขึ้น ซึ่งจัดกลุ่มสมาชิกข้อมูลและฟังก์ชันสมาชิกไว้ในประเภทเดียวกัน อ็อบเจ็กต์คืออินสแตนซ์ที่เป็นรูปธรรมที่สร้างขึ้นจากคลาสนั้น โดยเก็บสำเนาข้อมูลที่อธิบายไว้ในแบบแผนนั้นไว้

ความแตกต่างหลักอยู่ที่การเข้าถึงโดยค่าเริ่มต้น: สมาชิกของคลาสหนึ่งๆ จะเป็นแบบ private โดยค่าเริ่มต้น ในขณะที่สมาชิกของอีกคลาสหนึ่งจะเป็นแบบ private โครงสร้าง โดยค่าเริ่มต้นจะเป็นแบบสาธารณะ ทั้งสองแบบรองรับการสืบทอด คอนสตรัคเตอร์ และการห่อหุ้มข้อมูล C++.

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

ฟังก์ชันเพื่อน (friend function) คือฟังก์ชันที่ไม่ใช่สมาชิก แต่ได้รับอนุญาตให้เข้าถึงสมาชิกส่วนตัว (private) และสมาชิกที่ได้รับการป้องกัน (protected) ของคลาส ฟังก์ชันนี้ถูกประกาศภายในคลาสด้วยคีย์เวิร์ด friend แต่ถูกนิยามภายนอกคลาสเหมือนฟังก์ชันทั่วไป

ตัวชี้ `this` เป็นตัวชี้โดยปริยายที่มีอยู่ในทุกฟังก์ชันสมาชิกที่ไม่ใช่แบบสแตติก มันชี้ไปยังอ็อบเจ็กต์ที่เรียกใช้ฟังก์ชันนั้น ทำให้โค้ดสามารถอ้างอิงถึงสมาชิกของอ็อบเจ็กต์นั้นได้ และช่วยแก้ปัญหาความขัดแย้งด้านชื่อระหว่างพารามิเตอร์และสมาชิกข้อมูล

การห่อหุ้มข้อมูล (Encapsulation) คือการรวมข้อมูลและฟังก์ชันที่ทำงานกับข้อมูลนั้นไว้ในคลาสเดียว จากนั้นซ่อนรายละเอียดภายในโดยใช้สมาชิกส่วนตัว (private members) ส่วนฟังก์ชันสมาชิกสาธารณะ (public member functions) จะเปิดเผยอินเทอร์เฟซที่ควบคุมได้ ซึ่งช่วยปกป้องข้อมูลจากการเข้าถึงโดยไม่ได้ตั้งใจหรือไม่ได้รับอนุญาต

ใช่แล้ว ผู้ช่วยเขียนโค้ด AI จะแปลงข้อความแจ้งหรือความคิดเห็นสั้นๆ ให้เป็นคำจำกัดความของคลาสที่ใช้งานได้จริง รวมถึงสมาชิกข้อมูล ตัวระบุการเข้าถึง ตัวสร้าง และฟังก์ชันสมาชิก ตรวจสอบระดับการเข้าถึงและตรรกะการเริ่มต้นที่สร้างขึ้นเสมอก่อนที่จะคอมไพล์โค้ด

ใช่. นักบิน GitHub โปรแกรมนี้แนะนำการประกาศคลาส คอนสตรัคเตอร์ เกตเตอร์ และเซตเตอร์ขณะที่คุณพิมพ์ ช่วยจัดการโค้ดซ้ำซ้อนได้อย่างรวดเร็ว แต่คุณควรตรวจสอบการเข้าถึงสมาชิก ตรรกะของคอนสตรัคเตอร์ และการใช้งานอ็อบเจ็กต์ก่อนทำการสร้างโปรแกรมอยู่ดี

สรุปโพสต์นี้ด้วย: