ความแตกต่างระหว่าง Class และ Struct ความแตกต่างระหว่าง
ก่อนที่เราจะเข้าใจความแตกต่างระหว่าง Class และ Struct เราควรทราบแนวคิดพื้นฐานบางอย่างที่เกี่ยวข้องกับพวกเขา หากปราศจากความเข้าใจในแนวคิดก็ยากที่จะเข้าใจความแตกต่างระหว่างคนทั้งสอง
สิ่งที่เป็นชั้นเรียนและวัตถุ:
แนวคิดเหล่านี้เป็นแนวคิดที่สำคัญสองอย่างที่เกี่ยวข้องกับการเขียนโปรแกรมเชิงวัตถุและเป็นพื้นฐานสำหรับการจัดรูปแบบฟังก์ชันและข้อมูลที่ส่งผ่านไปยังฟังก์ชันอื่น ๆ เพื่อความเข้าใจที่ดีขึ้นเราสามารถเทียบเคียงกับตัวอย่างชีวิตจริงได้ Class สามารถถือเป็นร้านค้าและ Object สามารถเป็นของแต่ละร้านค้าเฉพาะเช่นร้านขายของชำเครื่องเขียนผลไม้ ฯลฯ วัตถุทั้งหมดร่วมกันคุณสมบัติทั่วไปของชั้นหลัก - เก็บ - และในทางกลับกัน, วัตถุอาจมีคุณสมบัติพิเศษของตัวเองเช่นการออกแบบเฉพาะแสง ฯลฯ ผ่านวัตถุที่เราสามารถใช้ชั้น; พวกเขาเป็นตัวอย่างของชั้นเรียน
ไวยากรณ์ของคลาส
Class Store {
สิ่งที่เป็นสตริงของสาธารณะ
การออกแบบสายสาธารณะ
}
ไวยากรณ์ของวัตถุ
จัดเก็บของชำ = new Store ();
Store Stationery = new Store ();
Struct คืออะไร?
โครงสร้างประกอบด้วยเฉพาะข้อมูลดังนั้นจึงเป็นประโยชน์ในการกำหนดความต้องการข้อมูลแต่ละอย่างโดยใช้โครงสร้างอ็อบเจ็กต์ ไม่มีชั้นเรียน นี่คือไวยากรณ์:
struct grocery_entrance {
ชื่อป้อนข้อมูลของถ่าน [50];
int int_size;
} ร้านขายของชำ;
ร้านค้าทั้งหมดสามารถใช้โครงสร้าง 'ทางเข้า' กับชื่อและขนาดแต่ละราย
การสืบทอดคืออะไร?
มันคล้ายกับว่าลูกชายสืบทอดทรัพย์สมบัติของพ่อของเขาและในทางกลับกันลูกชายยังสามารถเพิ่มทรัพย์สินบางอย่างอื่น ๆ ของเขาเอง ชั้นอาจเป็นชั้นฐานหรือชั้นที่ได้รับซึ่งในอดีตสามารถนำมาเป็นฐานในการสร้างหลัง ชั้นที่ได้รับจะเพิ่มคุณสมบัติอื่น ๆ อีกสองสามอันสำหรับตัวเองนอกเหนือจากสิ่งที่ได้รับจากชั้นฐาน เมื่อเราพิจารณาตัวอย่างข้างต้นร้านขายของชำยังคงสามารถได้รับไปยังร้านขายของชำเฉพาะเช่นร้านขายของชำ XYZ
ตอนนี้เราคุ้นเคยกับแนวคิดพื้นฐานแล้วเราจะสามารถแยกแยะระหว่างคลาสกับโครงสร้างได้พวกเขาแตกต่างกันอย่างไร?
ความสามารถในการใช้งานซ้ำได้:
- เนื่องจากคลาสเป็นกรอบพื้นฐานสามารถนำมาใช้ใหม่ได้ Structs เป็นองค์ประกอบเฉพาะที่มีคุณสมบัติเฉพาะดังนั้นจึงไม่สามารถนำมาใช้ใหม่ได้ ตัวอย่างเช่นร้านขายของชำชั้นร้านค้าสามารถใช้สำหรับร้านขายของชำประเภทใดก็ได้ แต่ Struct grocery_entrance มีเฉพาะสำหรับคนเดียวและไม่มีจุดใดในการใช้ซ้ำในชั้นเรียนอื่น ๆ การมองเห็น:
- ทุกฟังก์ชันใน Class จะใช้ได้กับ Objects ของ Publicตัวอย่างเช่นเรามีฟังก์ชันที่มีชื่อว่า 'สิ่งต่างๆ' ภายใต้ Class 'store' ฟังก์ชัน 'สิ่งต่างๆ' จะปรากฏแก่วัตถุทั้งหมดเช่นร้านขายของชำร้านขายเครื่องเขียนเป็นต้นการมองเห็นดังกล่าวไม่สามารถทำได้กับ Structs เนื่องจากข้อมูลของ struct ถูก จำกัด ไว้สำหรับตัวเองและไม่สามารถมองเห็นโครงสร้างอื่น ๆ ได้ เพื่อให้สิ่งที่ชัดเจนเราสามารถพูดได้ว่าข้อมูลของ 'grocery_entrance' ไม่สามารถเปิดเผยต่อสาธารณชนได้ที่ร้านอื่น ๆ ทั้งหมด Pass by Reference & Pass by Value:
- Pass by Reference จะส่งเฉพาะตำแหน่งหน่วยความจำและไม่ใช่ข้อมูลที่แท้จริงของฟังก์ชั่น ซึ่งหมายความว่าเมื่อใดก็ตามที่ค่าเปลี่ยนแปลงการเปลี่ยนแปลงจะปรากฏในหน้าที่ที่เกี่ยวข้อง การส่งผ่านค่าไปในทางกลับกันเป็นการส่งค่าไปยังฟังก์ชันเท่านั้น ในกรณีนี้การเปลี่ยนแปลงค่าหลังส่งจะไม่ปรากฏในฟังก์ชัน Class ใช้ผ่านการอ้างอิงและ Struct ใช้ค่า pass สืบทอด:
- ชั้นเรียนสามารถสืบทอดต่อไปเพื่อสร้างย่อยชั้น แต่ Structs ไม่สามารถใช้มรดกได้ ตัวอย่างเช่น Class Store มีหน้าที่ในการจัดเก็บ 'ร้านขายของชำ' ย่อย แต่ Struct 'grocery_entrance' ไม่สามารถรับฟังก์ชั่นใด ๆ ได้ เราสามารถพูดได้ว่าไม่มีแนวคิดเช่น sub-struct ที่นี่ การเปิดเผยเริ่มต้น:
- สมาชิกทั้งหมดของ Class จะถูกเก็บเป็นเอนทิตีเอกชนโดยค่าเริ่มต้นขณะที่สมาชิกของ Struct จะถูกเก็บไว้เป็นเอนทิตีสาธารณะตามค่าเริ่มต้น ขนาดของคลาสเปล่าและโครงสร้าง:
- Class ใช้ขนาดไบต์ 1 ไบต์ถึงแม้ว่าจะว่างเปล่า แต่ Struct ไม่เคยใช้หน่วยความจำใด ๆ เมื่อว่างเปล่า ซึ่งหมายความว่าเราสามารถพูดได้ว่าขนาดของ struct ว่างเปล่าเท่ากับ 0 ไบต์ การเก็บขยะ:
- สามารถเก็บขยะได้ในชั้นเรียนเนื่องจากพวกเขาใช้การอ้างอิง ดังนั้นจึงง่ายต่อการทำความสะอาดสถานที่หนึ่งที่มีการจัดเก็บข้อมูล ในทางกลับกันการเก็บรวบรวมขยะไม่สามารถทำได้กับ Struct เนื่องจากใช้ค่าผ่านและข้อมูลจะกระจายอยู่ในตำแหน่งที่ตั้งอื่น การจัดการหน่วยความจำ:
- เนื่องจาก Class อนุญาตให้เก็บขยะได้การจัดการหน่วยความจำก็มีผลเช่นกัน แต่มันไม่ได้เป็นที่มีประสิทธิภาพกับ Structs คอนสตรัคเตอร์:
- คอนสตรัคเตอร์จะสร้างคลาสไว้โดยค่าที่กำหนดไว้ เราสามารถมองมันเหมือนสิ่งที่ได้รับการเริ่มต้นด้วยค่า ถ้ามีการสร้างคลาสใหม่ตัวสร้างถูกเรียกเพื่อจัดสรรหน่วยความจำสำหรับอินสแตนซ์นั้น เราสามารถส่งผ่านค่าเป็นอาร์กิวเมนต์ขณะที่เรียก constructor ให้เรามาอภิปรายกันตอนนี้ คลาสอนุญาต constructors ทุกประเภทเช่นมีหรือไม่มีอาร์กิวเมนต์ในขณะที่ structs อนุญาตให้ constructors มีข้อโต้แย้ง i. อี ตัวสร้างพารามิเตอร์ Destructor:
- destructor เรียกว่าเมื่อใดก็ตามที่เราต้องการลบ instance ของคลาส destructor ในที่สุดก็จะลบอินสแตนซ์ดังกล่าวออกและปลดปล่อยหน่วยความจำออก Class สามารถใช้ destructor ในขณะที่ Struct ไม่สามารถทำได้ การเริ่มต้นตัวแปรสมาชิก:
- ในคลาสเราสามารถเริ่มต้นตัวแปรสมาชิกโดยตรง เช่นการเริ่มต้นเป็นไปไม่ได้กับ Structs การสร้างวัตถุ:
- ไวยากรณ์ทั่วไปสำหรับการสร้างวัตถุในคลาสคือ: Demo obj = new Demo ();
ซึ่งหมายความว่าเราต้องใช้คำหลัก 'new' ในขณะที่สร้างอ็อบเจ็กต์ของคลาสนี้ไม่จำเป็นเมื่อสร้างวัตถุของ Structs เพียงแค่ดูรูปแบบของพวกเขา:
Demo obj;
ทำงานได้อย่างสมบูรณ์แม้ไม่มีคำสำคัญ 'ใหม่'
เมื่อใดควรใช้ Class และเมื่อใช้ Struct?
เนื่องจากคลาสมีความยืดหยุ่นในการส่งข้อมูลและการทำงานร่วมกันเราสามารถใช้งานได้เมื่อวัตถุที่ใช้มีความซับซ้อนและใหญ่ ในตัวอย่างของเรา Mall สามารถใช้คลาส 'store' เพื่อแสดงระบบในลักษณะที่ดีกว่า Structs แต่จะ จำกัด ให้วัตถุขนาดเล็กเนื่องจากมีประสิทธิภาพน้อยกว่าชั้นเรียน ดังนั้นถ้าคุณออกแบบร้านของคุณเอง Structs เป็นตัวเลือกที่ดีกว่า
วิธีการแปลง Struct ให้เป็น Class และ Versa Versa?
คุณอาจเคยได้ยินคำว่า 'boxing' และ 'unboxing' เพื่อแปลงโครงสร้างเป็น Class และในทางกลับกัน แม้ว่ากระบวนการเหล่านี้เป็นกระบวนการที่มีประสิทธิภาพเพื่อช่วยเราในการแปลงพวกเขาควรจะจัดการด้วยความระมัดระวัง เนื่องจากมีผลต่อตำแหน่งหน่วยความจำโดยตรงมีผลกระทบอย่างมากต่อประสิทธิภาพของระบบของเรา นอกจากนี้ยังส่งผลกระทบต่อกระบวนการเก็บขยะมูลฝอยและส่งผลให้ระบบไม่มีประสิทธิภาพโดยรวม ดังนั้นให้ใช้ Conversion เหล่านี้เฉพาะเมื่อจำเป็นเท่านั้น
ลองดูความแตกต่างที่กล่าวมาในรูปแบบตาราง
S ไม่มี