保护继承
#include <iostream>
using namespace std;
//公有继承,父类的public继承在public下,父类的protected集成在protected下,private继承在看不到的地方,无法直接访问
//保护继承,将父类的public和protected都继承在自己的protected下,private继承在看不到的地方,无法直接访问
//私有继承,将父类的public和protected都继承在自己的private下,private继承在看不到的地方,无法直接访问
class person
{
public:
person()
{
name = "zs";
}
void play()
{
cout<<"person::play()"<<endl;
cout<<name<<endl;
}
protected:
string name;
};
class soldier:protected person//将name继承在protected下
{
public:
soldier()
{
}
void work()
{
name = "zs is pig";
age = 30;
cout<<name<<endl;
cout<<age<<endl;
cout<<"soldier::work()"<<endl;
}
protected:
int age;
};
class infantry:public soldier//公有继承将name集成在protected下,通过attack能访问name
{
public:
void attack()
{
name = "yeah";
cout<<name<<endl;
cout<<"infantry::attack()"<<endl;
}
};
int main()
{
infantry os;
os.attack();
}
不管哪种继承方式,父类的私有成员都不可以访问,只有间接的通过公有成员才能获取到私有成员的值
1) public继承方式
- 基类中所有public成员在派生类中为public属性;
- 基类中所有protected成员在派生类中为protected属性;
- 基类中所有private成员在派生类中不可访问。
2) protected继承方式
- 基类中的所有public成员在派生类中为protected属性;
- 基类中的所有protected成员在派生类中为protected属性;
- 基类中的所有private成员在派生类中仍然不可访问。
3) private继承方式
- 基类中的所有public成员在派生类中均为private属性;
- 基类中的所有protected成员在派生类中均为private属性;
- 基类中的所有private成员在派生类中均不可访问。
整理自点击打开链接