C++的继承与派生

派生类的构成

从基类接收成员:

派生类把基类所有的数据成员接收过来。

调整从基类接收的数据成员:

可以改变基类成员在派生类中的访问属性,这是通过指定继承方式决定的。
1.公用继承
2.私有继承
3.保护成员和保护继承
说明:(1)公用的,派生类内和派生类外都可以访问;(2)受保护的,派生类内可以访问,派生类外不能访问,其下一层的派生类可以访问;(3)私有的,派生类内可以访问,派生类外不能访问;(4)基类中不可访问的,派生类内和派生类外都不能访问。

多级派生时的访问属性

class A{
    public:
        int i;
    protected:
        void f2();
        int j;
    private:
        int k;
};

class B:public A{
    public:
        void f3();
    protected:
        void f4();
    private:
        int m;
};

class C:protected B{
    public:
        void f5();
    private:
        int n;
};
            i     f2     j     k      f3     f4     m     f5     n
基类A:      公用   保护   保护   私有                  
公用派生类B: 公用   保护   保护  不可访问  公用    保护   私有
保护派生类C: 保护   保护   保护  不可访问  保护    保护  不可访问 公用   私有

多重继承的二义性问题

C++提供虚基类(Virtual base class)的方法,使得在继承间接共同基类时只保留一份成员。
规定:在最后派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化

例:

class person{
    public:
        person(string nam,char s,int a){
            name = nam;
            sex = s;
            age = a;
        }
    private:
        string name;
        char sex;
        int age;
};

class Teacher:virtual public person{
    public:
        Teacher(String nam,char s,int a,string t):person(nam,s,a){
            title = t;
        }
    protected:
        string title;
};

class student:virtual public person{
    public:
        student(string nam,char s,ing a,float sco):person(nam,s,a){
            score = sco;
        }
    protected:
        float score;
};

class graduate:public teacher,public student{
    public:
        graduate(string nam,char s,int a,string t,float sco,float w):
            person(nam,s,a),teacher(nam,s,a,t),studeng(nam,s,a,w){
                wage = w;
        }
    privatefloat wage;
};

注:不继承来自基类的构造函数和析构函数,派生类需要自己定义和重写自己的构造函数和析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值