訪問權限:public 可以被任意實體訪問,protected 只允許子類(無論什么繼承方式)及本類的成員函數訪問,private 只允許本類的成員函數訪問。三種繼承方式分別是 public 繼承,protect 繼承,private 繼承。
示例程序如下:
#include <iostream>
#include <String>
using namespace std;
// 基類
class student
{
public:
string name;
protected:
int age;
private:
char sex;
public:
void showStu()
{
cout << this->name << endl; // 1、在本類能夠訪問類的公有數據成員
cout << this->age << endl; // 1、在本類能夠訪問類的保護數據成員
cout << this->sex << endl; // 1、在本類能夠訪問類的私有數據成員
}
};
// 派生類 - public繼承
class public_Sub : public student
{
public:
void show()
{
cout << this->name << endl; // 2、public繼承,在派生類中能夠訪問基類的公有數據成員
cout << this->age << endl; // 2、public繼承,在派生類中能夠訪問基類的保護數據成員
//cout << this->sex << endl; // error:2、在c類中不能訪問基類的私有數據成員
}
};
// 派生類 - protected繼承
class protected_Sub : protected student
{
public:
void show()
{
cout << this->name << endl; // 3、protected繼承,在派生類中能夠訪問基類的公有數據成員
cout << this->age << endl; // 3、protected繼承,在派生類中能夠訪問基類的保護數據成員
//cout << this->sex << endl; // error:3、在派生類中不能訪問基類的私有數據成員
}
};
// 派生類 - private繼承
class private_Sub : private student
{
public:
void show()
{
cout << this->name << endl; // 4、private繼承,在派生類中能夠訪問基類的公有數據成員
cout << this->age << endl; // 4、private繼承,在派生類中能夠訪問基類的保護數據成員 【即使是private繼承】
//cout << this->sex << endl; // error:4、在派生類中不能訪問基類的私有數據成員
}
};
int main()
{
student stu;
cout << stu.name << endl; // 5、在類外可以訪問類的公有數據成員
//cout << stu.age << endl; // error,5、在類外不能訪問類的保護數據成員
//cout << stu.sex << endl; // error,5、在類外不能訪問類的私有數據成員
return 0;
}
- 派生類內不管是 public、protected、private 繼承,總是可以 public、protected 成員,基類中的 private 成員永遠不能再派生類內直接訪問,不論通過哪種方式。
- 派生類對象僅當 public 派生時,對基類中的 public 成員有可訪問/可修改的權限,其他都為不可訪問/不可修改。
另外,繼承方式會改變從基類繼承的成員在派生類的訪問權限:
1、public 繼承不改變基類成員的訪問權限;
2、protected 繼承將基類中 public 成員變為子類的 protected 成員,其它成員的訪問權限不變;
3、private 繼承使得基類所有成員在子類中的訪問權限變為 private。
C++ 中為什么要定義 public、protect、private 這三種訪問權限?
有些我們需要給外面看的,也就是對外接口,那么就是 public。如果我們不想讓別人知道內部的實現細節,那么就是 private。如果我們不想讓別人知道,想讓自己的孩子什么的知道(這里涉及到繼承),那么就可以作為 protected。