คำถามที่ว่าจะใช้คลาสหรือโครงสร้างเป็นเรื่องปกติในหมู่โปรแกรมเมอร์ C++ ในขณะที่ออกแบบโค้ด ในบรรดานักพัฒนาที่อายุน้อยที่สุด มีความเข้าใจผิดเกี่ยวกับความแตกต่างระหว่างคลาสและโครงสร้างในทางเทคนิค แม้จะเข้าใจความแตกต่างแล้ว บางครั้งนักพัฒนาก็ไม่เห็นด้วยกับโค้ดที่เหมาะสมกว่า
ใน.NET โดยทั่วไปจะมีประเภทอยู่สองประเภท คลาสที่เป็นประเภทอ้างอิง และ struct เป็นประเภทค่า ประเภทการอ้างอิงส่วนใหญ่อาศัยอยู่บนฮีป ในขณะที่ประเภทค่าอยู่ในแนวเดียวกัน บทความนี้สามารถเคลียร์ข้อแตกต่างอื่นๆ ได้หลายอย่าง
คลาส vs โครงสร้าง
ความแตกต่างหลัก ระหว่างคลาสและ struct คือคลาสนั้นเป็นประเภทอ้างอิงซึ่งถูกจัดสรรบนฮีปรวมถึงการรวบรวมขยะ ในอีกทางหนึ่ง โครงสร้างเป็นประเภทค่าที่จัดสรรในอินไลน์หรือสแต็กในประเภทที่มี
คลาสที่มีอยู่ใน C ++ นั้นค่อนข้างคล้ายกับโครงสร้าง C ประกอบด้วยรายการสมาชิกข้อมูลและชุดปฏิบัติการที่ดำเนินการโดยทั่วไปในชั้นเรียน อาจกล่าวได้ว่าในการเขียนโปรแกรมเชิงวัตถุ คลาสเป็นตัวสร้าง ชั้นเรียนยังคล้ายกับพิมพ์เขียวของวัตถุ
โครงสร้างคือชนิดข้อมูลของประเภทค่า ช่วยให้ตัวแปรเดียวเก็บข้อมูลที่เชื่อมโยงหลายประเภท ขณะสร้างโครงสร้างจะใช้คีย์เวิร์ด "struct" เมื่อวัตถุ struct ถูกสร้างขึ้นโดยใช้ตัวดำเนินการใหม่ ตัวสร้างที่เหมาะสมจะถูกเรียก และมันถูกสร้างขึ้น
ตารางเปรียบเทียบระหว่างคลาสและโครงสร้าง
พารามิเตอร์ของการเปรียบเทียบ | ระดับ | โครงสร้าง |
---|---|---|
การมองเห็นเริ่มต้น | ส่วนตัว | สาธารณะ |
ขนาดเมื่อว่าง | 1 ไบต์ | 0 ไบต์ |
การเริ่มต้นตัวแปรสมาชิก | อนุญาต | ไม่อนุญาต |
เก็บขยะ | เป็นไปได้เพราะใช้ pass by reference | เป็นไปไม่ได้เพราะใช้ค่าผ่าน |
การนำกลับมาใช้ใหม่ | อย่างสมบูรณ์ | ไม่ |
คลาสคืออะไร?
ในการเขียนโปรแกรม C++ คลาสคือโครงสร้างข้อมูลหรือประเภทที่ผู้ใช้กำหนดเองซึ่งมีฟังก์ชันและข้อมูลเป็นสมาชิก การเข้าถึงเริ่มต้นเป็นแบบส่วนตัวสำหรับสมาชิกคลาส C++ สมาชิกไพรเวตไม่สามารถเข้าถึงภายนอกคลาสได้ และสามารถเข้าถึงได้ผ่านเมธอดของคลาสเท่านั้น อนุญาตให้สืบทอดในคลาสเพราะฟังก์ชันสามารถสืบทอดโดยคลาสย่อย
อินสแตนซ์ประเภทข้อมูลคลาสเรียกว่าอ็อบเจ็กต์ ซึ่งประกอบด้วยฟังก์ชันสมาชิก ตัวดำเนินการโอเวอร์โหลด และค่าคงที่ตัวแปรที่กำหนดโดยโปรแกรมเมอร์ ด้วยความช่วยเหลือของเทมเพลตคลาส การประกาศคลาสสามารถสร้างขึ้นได้ เทมเพลตคลาสเหล่านี้แสดงถึงตระกูลคลาส
การประกาศคลาสจริงได้มาจากเทมเพลตที่สร้างอินสแตนซ์ด้วยอาร์กิวเมนต์อย่างน้อยหนึ่งอาร์กิวเมนต์ของเทมเพลต ความเชี่ยวชาญพิเศษของเทมเพลตถูกกำหนดให้เป็นอินสแตนซ์ของเทมเพลตที่มีชุดอาร์กิวเมนต์เฉพาะ ไวยากรณ์ C++ พยายามสร้างโครงสร้างทุกด้านให้ดูเหมือนกับประเภทข้อมูลพื้นฐาน
คลาสของ C++ มีสมาชิกอยู่ สมาชิกของคลาสได้รับการประกาศให้เป็นแบบส่วนตัวหรือแบบสาธารณะโดยตัวระบุตามลำดับ หลังจากตัวระบุ หากพบสมาชิกคนใดจะมีการเข้าถึงที่เกี่ยวข้องเว้นแต่จะพบตัวระบุอื่น
โครงสร้างคืออะไร?
พูดง่ายๆ ก็คือ โครงสร้างโดยทั่วไปหมายถึงกลุ่ม เป็นองค์ประกอบที่เกี่ยวข้องหลายอย่างที่ต้องเชื่อมโยงเข้าด้วยกันในบริบทในลักษณะใดรูปแบบหนึ่ง บริบทประเภทนี้สามารถส่งผ่านตัวเลขที่จำกัดอาร์กิวเมนต์ไปยังฟังก์ชันได้
ในแง่ของภาษาโปรแกรม C มันคือการประกาศประเภทข้อมูลคอมโพสิต โดยทั่วไปจะกำหนดรายการตัวแปรทางกายภาพที่จัดกลุ่มไว้ภายใต้ชื่อเดียวในบล็อกหน่วยความจำ อนุญาตให้เข้าถึงตัวแปรต่าง ๆ ผ่านจุดเดียวหรือผ่านชื่อที่ประกาศ struct ซึ่งส่งคืนที่อยู่ซึ่งเหมือนกัน
โครงสร้างสามารถมีชนิดข้อมูลอื่นๆ เพื่อใช้สำหรับบันทึกที่มีชนิดข้อมูลผสมหรือชนิดผสมอื่นๆ ในภาษา C จะอ้างอิงถึงบล็อกต่อเนื่องกันของหน่วยความจำกายภาพ ซึ่งโดยทั่วไปจะคั่นด้วยขอบเขตของความยาวของคำ เป็นผลให้แต่ละฟิลด์ตั้งอยู่ที่ออฟเซ็ตที่แน่นอนตั้งแต่เริ่มต้น
เมื่อพูดถึงภาษา C++ โครงสร้างจะคล้ายกับคลาส C++ แต่การมองเห็นเริ่มต้นแตกต่างกันมาก สามารถจัดสรรแบบไดนามิกหรือจัดสรรแบบคงที่บนฮีปหรือสแต็กด้วยตัวชี้ที่ชัดเจน การมองเห็นเริ่มต้นของ struct ใน C ++ เป็นแบบส่วนตัว
ความแตกต่างหลักระหว่างคลาสและโครงสร้าง
บทสรุป
สามารถสรุปได้ว่าทั้งคลาสและ struct เป็นเรื่องธรรมดาในหมู่โปรแกรมเมอร์ C++ คลาสเป็นประเภทอ้างอิงที่จัดสรรบนฮีปเช่นเดียวกับการรวบรวมขยะ ในทางกลับกัน โครงสร้างเป็นประเภทค่าที่จัดสรรในอินไลน์หรือสแต็กในประเภทที่มี
เมื่อพูดถึงการมองเห็น การมองเห็นเริ่มต้นจะเป็นแบบส่วนตัวในชั้นเรียน ในขณะที่เป็นแบบสาธารณะในโครงสร้าง การรวบรวมขยะสามารถทำได้ในชั้นเรียนเพราะใช้การอ้างอิงแบบผ่านๆ ในทางกลับกัน ใน struct การรวบรวมขยะเป็นไปไม่ได้เพราะใช้ค่าที่ผ่าน ขนาดของคลาสคือ 1 ไบต์เมื่อว่าง ขณะที่ถูกโจมตี จะเป็น 0 ไบต์