继承方式不影响派生类类内(派生类成员对基类成员的访问)对基类成员的访问(保护继承方式,在三代的情况下会比较特殊)
只影响派生类对象在类外对基类成员的访问,具体如下:
公有继承:派生类拥有的基类成员访问权限不变;
保护继承:就只有派生类拥有的基类公有权限成员会变成保护权限成员,其他的保护权限成员还是保护权限成员,私有权限成员还是私有权限成 员;
私有继承:派生类拥有的基类公有权限成员和保护权限成员都会变成私有权限成员,剩余的私有权限成员还是私有权限成员
有这样一个疑问?
既然只影响派生类对象在类外对基类成员的访问,保护继承和私有继承都是不允许在派生类对象在类外访问基类成员,没什么区别?
在有第三代的情况下就会有区别,区别如下:
(1)私有继承之后,第一代的所有基类成员(包括保护权限成员和公有权限成员)都不能在第三代中直接访问(无论第三代以任何方式继承第二代),因为这个原因,私有继承较少使用;(2)而保护继承则不存在这种现象,第三代及以后仍可保留保护权限。
例子如下:
class Person
{
private:
string name; //姓名
int age; //年龄
float weight; //体重
public:
Person(string n, int a, float w):name(n),age(a),weight(w)
{ }
void eat()
{cout<<" 牙好,胃口就好,吃嘛嘛香"<<endl;} //吃东西
};
class Student : private Person //(如果是protected继承方式,则下面不会报错)
{
private:
string major; //专业
public:
Student(string n, int a, float w,string mr):Person(n,a,w),major(mr)
{ }
void study()
{
eat();
cout<<"努力学习,打好专业基础"<<endl;
}
};
class Teacher : public Student
{
public:
void teach()
{
eat(); //报错
cout<<"努力学习,打好专业基础"<<endl;
}
};