• 封装继承和多态


    一---封装
    万事万物皆对象。
    封装的意义:
    将属性和行为作为一个整体。
    可以把属性和行为放在不同的权限下进行管理。
    public 类内,类外均可访问
    protected 类内可以,类外不可以
    private 类内可以,类外不可以
    保护和私有的区别在于继承的时候儿子可以使用父亲的保护内容。


    成员属性设置为私有优点
    1)可以自己控制读写权限
    2)对于写权限,我们可以检测数据的有效性(比如年龄在0-100岁之间)

    二---继承
    可以减少重复的代码
    父类中所有的属性都会被继承下来,父类中的私有属性被编译器隐藏了,但数据确实继承下来了。


    三---多态
    多态的分类
    1)静态多态:运算符重载,函数重载,复用函数名
    2)动态多态:派生类和虚函数实现运行多态

    静态和动态的区别:静态多态的函数地址早绑定-编译阶段确定函数地址,动态多态的函数地址晚绑定-运行阶段确定函数地址。

    动态多态的要求:
    1)要有继承关系
    2)子类要重写父类的虚函数

    动态多态的使用 :
    父类的指针或者引用来指向子类对象

    要想实现动态多态 ,父类中的函数必须为虚函数,这样就可以地址晚绑定。

    多态的原理剖析:
    如果不加virtual的话占1个字节,加了virtual之后占4个字节,说明virtual的底层是个指针。

    vfptr(虚函数(表)指针)
    v--virtual
    f--function
    ptr-pointer

    这个指针会指向一个虚函数表(vftable),表内记录虚函数的地址。当子类重写了父类的虚函数,子类中的虚函数表内部会替换成子类的虚函数地址。当父类的指针或者引用指向子类的时候,就发生了多态。

     

  • 相关阅读:
    [iOS]C语言技术视频-15-指针变量高级用法练习一(函数指针完成动态排序)
    [iOS]C语言技术视频-14-指针变量高级用法(函数指针)
    [iOS]C语言技术视频-13-指针变量练习三(结构体指针变量)
    [iOS]C语言技术视频-12-指针变量练习二(数组打印)
    ReentrantLock加锁解锁过程
    spring初始化bean之后的3种回调方式
    spring循环引用-笔记
    二叉树的三种遍历方式
    快速排序
    java模拟实现单向链表
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14315817.html
Copyright © 2020-2023  润新知