แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | เอกชน | มีการป้องกัน |
---|---|---|
การสืบทอดคุณสมบัติไปยังคลาสที่ได้รับ | คลาสที่ได้รับมาไม่สามารถเข้าถึงสมาชิกส่วนตัวของคลาสพื้นฐานได้ | คลาสที่ได้รับสามารถเข้าถึงสมาชิกที่มีการป้องกันคลาสพื้นฐานได้ |
การเข้าถึง | สมาชิกส่วนตัวของคลาสไม่สามารถเข้าถึงได้จากขอบเขตของคลาส | สมาชิกที่ได้รับการป้องกันของคลาสจะไม่สามารถเข้าถึงได้จากขอบเขตของคลาสยกเว้นคลาสที่ได้รับในทันที |
สามารถเข้าถึงได้จากชั้นเรียนของตนเอง | ใช่ | ใช่ |
สามารถเข้าถึงได้จากคลาสที่ได้รับ | ไม่ | ใช่ |
สามารถเข้าถึงได้จากภายนอก | ไม่ | ไม่ |
คำจำกัดความของส่วนตัว
สมาชิกคลาสที่ประกาศเป็นแบบ ส่วนตัว สามารถเรียกค้นได้ภายในชั้นเรียนเท่านั้น กล่าวอีกนัยหนึ่งสมาชิกที่ประกาศในส่วนส่วนตัวของชั้นเรียนสามารถเข้าถึงได้โดยฟังก์ชันเพื่อนและฟังก์ชันสมาชิกของชั้นเรียนเท่านั้น สมาชิกส่วนตัวไม่สามารถเข้าถึงคลาสที่ได้รับโดยตรงและไม่สามารถเข้าถึงได้จากขอบเขตของคลาส
โปรแกรม C ++ แสดงแนวคิดของตัวระบุการเข้าถึงส่วนตัว
# รวมถึงการใช้เนมสเปซ std; คลาส A {ส่วนตัว: int i; public: void get () {cout <> i; }}; คลาส B: สาธารณะ A {public: void show () {i ++; ศาล << "\ n หมายเลขที่คุณป้อนหลังจาก incrementcpp"> # รวมถึงการใช้ namespace std; เลี้ยงลูกด้วยนมชั้น {สาธารณะ: เป็นโมฆะเลี้ยงลูกด้วยนมวิธี (เป็นโมฆะ) {ศาล << "มันมาอยู่ภายใต้หมวดหมู่ของสัตว์เลี้ยงลูกด้วยนม"ในโปรแกรมที่กำหนดไว้ข้างต้นวัตถุหนึ่งชิ้นของคลาสเด็กนั้นถูกสร้างขึ้นด้วยชื่อ“ ob” และฟังก์ชันสมาชิกของคลาสพาเรนต์สามารถเข้าถึงได้ผ่านการเรียกเมธอดคลาสย่อย“ marine_mammalMethod” แม้ว่าวิธีการหลักจะไม่สามารถเข้าถึงได้โดยตรงกับวัตถุ“ ob”
คำจำกัดความของการป้องกัน
สมาชิกคลาสที่ประกาศว่า ได้รับการป้องกัน ในคลาสสามารถเข้าถึงได้ผ่านฟังก์ชันสมาชิกและฟังก์ชันเพื่อนของคลาสเท่านั้น สมาชิกที่ได้รับการปกป้องเหล่านี้ไม่สามารถเข้าถึงได้นอกขอบเขตของคลาสยกเว้นคลาสย่อย (ที่ได้รับทันที) มันทำหน้าที่วัตถุประสงค์ที่ถูก จำกัด ในการสืบทอดและสืบทอดคุณสมบัติในทางที่ จำกัด
โปรแกรม C ++ ที่ระบุด้านล่างแสดงแนวคิดของตัวระบุการเข้าถึงที่ได้รับการป้องกัน
# รวมถึงการใช้เนมสเปซ std; บัญชี class1 {ป้องกัน: int x, y; // เข้าถึงได้จากคลาสสาธารณะที่ได้รับ: ชุดโมฆะ (int a, int b) {x = a; Y = b; } void show () {cout <ในตัวอย่างข้างต้นคลาสเด็กสืบทอดคุณสมบัติของคลาสฐานเนื่องจากสมาชิกข้อมูลถูกประกาศเป็นสาธารณะหรือได้รับการป้องกัน มันจะเป็นไปไม่ได้ถ้า x และ y ถูกประกาศว่าเป็นไพรเวตในคลาสฐาน
ความแตกต่างที่สำคัญระหว่างส่วนตัวและได้รับการป้องกันใน C ++
- คีย์เวิร์ดที่มีการป้องกันสามารถใช้เพื่อสร้างสมาชิกคลาสที่เป็นส่วนตัวของคลาส แต่สามารถสืบทอดและใช้โดยคลาสที่ได้รับ ในทางกลับกันสิ่งนี้ไม่สามารถทำได้ในขณะที่ใช้งานส่วนตัวเนื่องจากสมาชิกส่วนตัวไม่สามารถสืบทอดโดยตรงไปยังคลาสที่ได้รับ
- เมื่อคลาสพื้นฐานได้รับการสืบทอดโดยใช้ตัวระบุการเข้าถึงส่วนตัวมันจะทำให้สมาชิกสาธารณะและสมาชิกที่ได้รับความคุ้มครองทั้งหมดของคลาสฐานสมาชิกส่วนตัวของคลาสที่ได้รับมา ในทางตรงกันข้ามนี่ไม่ใช่กรณีในตัวระบุการเข้าถึงที่ได้รับการป้องกัน
ข้อสรุป
ส่วนตัวและได้รับการป้องกันเป็นตัวระบุการเข้าถึงที่ใช้ในการตั้งค่าการมองเห็นของชั้นเรียนและสมาชิกของมันแตกต่างกัน อย่างไรก็ตามการป้องกันมีความยืดหยุ่นมากกว่าส่วนตัว