Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt private, public, protected trong kế thừa C++

C++ có 3 mức truy cập (access specifier) kiểm soát khả năng nhìn thấy thành viên class từ bên ngoài và từ class con (derived).

Bảng tóm tắt

Mức truy cậpTrong classClass con (derived)Bên ngoài (main, v.v.)
public✓✓✓
protected✓✓✗
private✓✗✗

Kế thừa (Inheritance) ảnh hưởng như thế nào?

Khi class con kế thừa từ class cha, mức truy cập của thành viên cha trong con thay đổi tùy loại kế thừa:

Loại kế thừapublic chaprotected chaprivate cha
public inheritancepublicprotectedkhông truy cập được
protected inheritanceprotectedprotectedkhông truy cập được
private inheritanceprivateprivatekhông truy cập được
  • public inheritance: "IS-A" relationship (con là một cha). Giữ nguyên public/protected.
  • protected inheritance: Hiếm dùng. Public/protected cha thành protected trong con.
  • private inheritance: "IMPLEMENTED-IN-TERMS-OF" (con triển khai bằng cha). Tất cả thành viên cha thành private trong con.

Ví dụ minh họa

class Base {
public:    int pub = 1;
protected: int pro = 2;
private:   int pri = 3;
};

class DerivedPublic : public Base {
    void f() { cout << pub << pro; /* pri lỗi */ }
};

class DerivedPrivate : private Base {
    void f() { cout << pub << pro; /* pri lỗi */ }
    // pub, pro giờ là private trong DerivedPrivate
};

Mặc định: class mặc định private cho thành viên và kế thừa. struct mặc định public.