第五周学习

来源:互联网 发布:英语语法 视频 知乎 编辑:程序博客网 时间:2024/06/07 06:57

5.1继承和派生

  • 继承:在定义一个新类的时候,如果该类与某个已定义过的类相似,则可以将原来的类定义为基类,现在的定义为派生类
  • 派生类是通过对基类进行修改和扩充得到的,派生类可以扩充新的成员变量和成员函数
  • 派生类拥有基类所有成员函数和成员变量
class 派生类名:public 基类名{};
  • 派生类在内存中储存时,最前面先是基类的对象,然后后面跟上自己的变量,成员函数等

5.2继承关系和复合关系

  • 继承关系:
    • 派生类一定是基类的一种
  • 复合关系:
    • k是类d的一个对象,类c中有k这个成员变量,则c和d是复合关系
    • 不能说一个类是另外的一种

5.3基类/派生类同名成员函数和protected关键字

  • 同名成员函数
class base{    int j;public:    int i;    void func();};class derived:public base{public:    int i;    void access(){        j=5;//这是基类的私有成员,不能这样赋值        i=5;//派生类的i赋值        base::i=5;//基类的i赋值        func();//调用派生类func()        base::func();//调用基类的func()    }    void func();};derived obj;obj.i=1;//派生类自身i赋值obj.base::i=1;派生类中的基类i赋值//所以不建议再派生类中定义与基类相同名字的成员变量
  • protected 关键字
  • 基类private成员可被以下访问:
    • 基类成员函数
    • 基类友元函数
  • 基类的public成员可被以下访问:
    • 基类成员函数
    • 基类友元函数
    • 派生类成员函数
    • 派生类友元函数
    • 其他函数
  • 基类protected成员可被以下访问:
    • 基类成员函数
    • 基类友元函数
    • 派生类的成员函数可以访问当前对象的protected成员
class father{protected:     int n;};class son:public father{void a(){    n=3;//可以访问当前对象的protected成员    a.n=5;//只能访问当前对象,这不是当前对象}};

5.4派生类构造函数

  • 派生类对象包括基类对象
  • 先执行基类构造函数再执行派生类构造函数,先执行派生类析构函数,再执行基类析构函数
构造函数名(形参表):基类名(基类构造函数实参表){}
class a{public:    int m,n;    a(int i,int j):m(i),n(j){}};class b:public a{public:    int o;    b(int i,int j,int k):a(i,j),o(k){}};

5.5public继承的赋值兼容规则

class base{};class derived:public base{};base b;derived d;
  • 派生类的对象可以赋值给基类对象
    b=d;
  • 派生类对象可以初始化基类的引用
    base & br=d;
  • 派生类对象地址可以赋值给基类指针
    base* p=&d;很重要,后面程序很多用到
  • 只有派生方式是public的时候上诉三个才可行
  • 声明派生类的时候,只需要列出它的直接基类即可
  • 派生类包括所有直接基类的变量和间接基类的变量
原创粉丝点击