c++ 继承方式

继承方式不影响派生类类内(派生类成员对基类成员的访问)对基类成员的访问(保护继承方式,在三代的情况下会比较特殊)
只影响派生类对象在类外对基类成员的访问,具体如下:
公有继承:派生类拥有的基类成员访问权限不变;
保护继承:就只有派生类拥有的基类公有权限成员会变成保护权限成员,其他的保护权限成员还是保护权限成员,私有权限成员还是私有权限成 员;
私有继承:派生类拥有的基类公有权限成员和保护权限成员都会变成私有权限成员,剩余的私有权限成员还是私有权限成员

有这样一个疑问?
既然只影响派生类对象在类外对基类成员的访问,保护继承和私有继承都是不允许在派生类对象在类外访问基类成员,没什么区别?
在有第三代的情况下就会有区别,区别如下:
(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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值