C++的继承与派生

来源:互联网 发布:干洗衣店软件 编辑:程序博客网 时间:2024/05/20 18:15

派生类的构成

从基类接收成员:

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

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

可以改变基类成员在派生类中的访问属性,这是通过指定继承方式决定的。

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;};

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

0 0
原创粉丝点击