在C++中,類的繼承訪問權限主要有三種:public(公有)、protected(保護)和private(私有)。這些訪問權限決定了基類成員在派生類中的可見性。
Public(公有)繼承: 當一個類公開繼承另一個類時,基類的公有成員和保護成員在派生類中都保持公有,而基類的私有成員在派生類中不可訪問。這意味著派生類的用戶可以訪問基類的公有和保護成員,但不能訪問私有成員。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : public Base {
public:
void accessMembers() {
publicMember = 10; // 可以訪問
protectedMember = 20; // 可以訪問
// privateMember = 30; // 錯誤!無法訪問基類的私有成員
}
};
Protected(保護)繼承: 當一個類保護繼承另一個類時,基類的公有成員和保護成員在派生類中都變為保護成員,而基類的私有成員仍然不可訪問。這意味著派生類的用戶不能訪問基類的公有成員,但可以訪問保護成員。派生類的成員函數可以訪問基類的公有和保護成員。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : protected Base {
public:
void accessMembers() {
// publicMember = 10; // 錯誤!無法訪問基類的公有成員
protectedMember = 20; // 可以訪問
// privateMember = 30; // 錯誤!無法訪問基類的私有成員
}
};
Private(私有)繼承: 當一個類私有繼承另一個類時,基類的公有成員和保護成員在派生類中都變為私有成員,而基類的私有成員仍然不可訪問。這意味著派生類的用戶不能訪問基類的任何成員(公有、保護或私有)。派生類的成員函數可以訪問基類的公有和保護成員,但不能訪問私有成員。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : private Base {
public:
void accessMembers() {
// publicMember = 10; // 錯誤!無法訪問基類的公有成員
// protectedMember = 20; // 錯誤!無法訪問基類的保護成員
// privateMember = 30; // 錯誤!無法訪問基類的私有成員
}
};
總之,C++類的繼承訪問權限允許您控制基類成員在派生類中的可見性。公有繼承使得基類成員在派生類中保持公有,保護繼承使得基類成員在派生類中變為保護成員,而私有繼承使得基類成員在派生類中變為私有成員。