• C++


    PS

    因为近期面试常问,所以记录一下相关问题。

    C++多态

    • 多种形态。

    • 一个接口,多种方法。

    • 分为两种多态,静态多态和动态多态。

    1. 静态多态:函数重载和运算符重载属于静态多态,复用函数名。

    2. 动态多态:派生类和虚函数实现运行时多态。

      • 虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(Override),或者称为重写。

    C++静态多态和动态多态区别

    • 静态多态的函数地址早绑定,编译阶段确定函数地址。

    • 动态多态的函数地址晚绑定,运行阶段确定函数地址。

    C++虚函数

    加 virtual 关键字

    C++虚函数表

    多态的实现原理就是虚函数表。

    C++虚函数和多态关系(虚函数的多态性)

    动态多态满足条件

    1. 有继承关系

    2. 子类重写父类的虚函数

      • 重写:函数名、参数列表、返回值类型,所有都必须同基类中被重写的函数一致,只有函数体不同,派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。

      • 重载:同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。

    多态的目的

    1. 封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。

    2. 而多态的目的则是为了“接口重用”,也就是说不论传递过来的究竟是类的哪个对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。

  • 相关阅读:
    Xpath语法与lxml库的用法
    Selenium--使用参考
    PhantomJS的替代品--无头浏览器(Headless Chrome)
    为什么只有一个元素的tuple要加逗号?
    反爬利器--设置代理服务器
    LeetCode 221. 最大正方形 | Python
    LeetCode 572. 另一个树的子树 | Python
    LeetCode 98. 验证二叉搜索树 | Python
    LeetCode 45. 跳跃游戏 II | Python
    LeetCode 25. K 个一组翻转链表 | Python
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14205396.html
Copyright © 2020-2023  润新知