在聲明一個派生類時將基類的繼承方式方式指定爲private的,稱爲私有繼承
謹記這兩點:
1, 私有基類的公用成員和保護成員在派生類的訪問屬性相當於派生類中的私有成員,只有派生類的成員函數能訪問,在派生類外不能訪問。
2, 私有基類的私有成員仍爲基類私有,所以只能基類的成員函數能訪問,則派生類不可訪問。
#include <iostream>
#include <string.h>
using namespace std;
class Student //聲明基類
{
public: // 公用
int count;
void get_value()
{
cin>>num>>name>>sex>>count;
}
void display()
{
cout<<"num: "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"sex: "<<sex<<endl;
}
void display2()
{
cout<<"count: "<<count<<endl;
}
private: //私有
int num;
string name;
char sex;
};
class Student1:private Student //聲明派生類
{
public:
void get_value_1()
{
get_value(); //公用繼承,所以可以調用基類的公用函數
cin>>age>>addr;
}
void display_1()
{
display(); //公用繼承,所以可以調用基類的公用函數
display2();
cout<<"age= "<<age<<endl;
cout<<"addr= "<<addr<<endl;
}
private:
int age;
string addr;
};
int main()
{
Student1 stud;
stud.get_value_1();
stud.display_1();
return 0;
}
此程序爲什麼能訪問基類的私有成員呢,是因爲通過派生類的成員函數訪問基類的公用的成員函數,而基類的公用成員函數在派生類中相當於
私有的成員函數,派生類可以訪問,所以派生類調用基類的公用成員函數就進一步的調用的基類私有成員。