Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแตกต่างระหว่าง private, public, และ protected inheritance ใน C++

Data hiding (การซ่อนข้อมูล) เป็นคุณสมบัติสำคัญของ OOP ป้องกันไม่ให้ฟังก์ชันเข้าถึง internal representation ของคลาสโดยตรง การจำกัดการเข้าถึงสมาชิกคลาส ระบุด้วย access modifiers: public, private, protected ภายในร่างกายคลาส

ค่าเริ่มต้น (default) สำหรับสมาชิกและคลาสคือ private

ตัวอย่างโครงสร้างคลาส

class Base {
public:
    // สมาชิก public: เข้าถึงได้จากทุกที่
protected:
    // สมาชิก protected: เข้าถึงได้ในคลาสนี้และ derived class
private:
    // สมาชิก private: เข้าถึงได้เฉพาะในคลาสนี้และ friend เท่านั้น
};

รายละเอียดแต่ละระดับ

Public (สาธารณะ)

  • เข้าถึงได้จากที่ไหนก็ได้นอกคลาส แต่ภายในโปรแกรม
  • สามารถ set/get ค่า public variables ได้โดยไม่ต้องผ่าน member function
  • เป็น interface ของคลาส

Private (ส่วนตัว)

  • เข้าถึงไม่ได้จากนอกคลาส แม้แต่ derived class
  • เฉพาะคลาสเองและ friend functions/classes เท่านั้นที่เข้าถึงได้
  • ใช้สำหรับ implementation details ที่ต้องการซ่อน

Protected (ป้องกัน)

  • คล้าย private แต่เพิ่มสิทธิ์: derived class (คลาสลูก) เข้าถึงได้
  • ใช้สำหรับสมาชิกที่ derived class ต้องใช้แต่อยากซ่อนจากภายนอก

Inheritance Access Specifiers (การสืบทอดพร้อมระบุการเข้าถึง)

นอกจาก member access แล้ว C++ ยังมี inheritance access specifier ที่ควบคุมว่า base class members จะมองเห็นใน derived class อย่างไร:

Base MemberPublic InheritanceProtected InheritancePrivate Inheritance
publicpublicprotectedprivate
protectedprotectedprotectedprivate
privateinaccessibleinaccessibleinaccessible
  • Public inheritance: IS-A relationship (Liskov substitution) - derived class เป็น base class
  • Protected inheritance: นادرใช้ - base class กลายเป็น protected ใน derived
  • Private inheritance: IS-IMPLEMENTED-IN-TERMS-OF - ใช้เพื่อ reuse implementation ไม่ใช่ interface

สรุป: ใช้ public inheritance สำหรับ IS-A ใช้ composition (has-a) แทน private inheritance ถ้าเป็นไปได้ protected ใช้เมื่อ derived class ต้องเข้าถึง base members