zoukankan      html  css  js  c++  java
  • C++多态、虚函数、纯虚函数、抽象类

    多态

    同一函数调用形式(调用形式形同)可以实现不同的操作(执行路径不同),就叫多态。

    两种多态:

    (1)静态多态:分为函数重载和运算符重载,编译时系统就能决定调用哪个函数。

    (2)动态多态(简称多态):运行时系统根据基类指针或引用的指向,才能知道调用哪个对象里的虚函数实现。

       动态多态是通过虚函数实现的,针对的也是虚函数。

      实现了从是谁调用谁指向谁调用谁的重大转变。

          这是析构函数声明为虚函数的原因,可以防止delete基类指针时,只调用基类析构函数造成的内存泄露。

    虚函数

    虚函数的作用:在基类中声明虚函数后,可以在派生类中重新定义与基类声明完全相同的函数(非虚函数也可以-同名覆盖),

    进而可以通过基类指针或引用来基类或派生类中的同名函数(非虚函数不可以-调用基类函数需加::符),从而实现多态。

    虚函数的特点:

    当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。

    派生类重新声明该虚函数时,可以省略virtual,但习惯上都加。

    声明虚函数的限制:

    (1)static成员函数不能是虚函数,因为静态成员函数不受限于某个对象,没有多态性的特征。

    (2)inline成员函数不能声明为虚函数。因为内联函数的执行代码明确的,没有多态性的特征。

    (3)构造函数不能是虚函数。因为构造函数在对象创建时调用,完成对象的初始化,此时对象还没有完全建立,更谈不上函数与类对象的绑定。

    虚函数表:

     ------

    纯虚函数

    纯虚函数的声明:virtual 函数类型 函数名(参数列表)=0;

    基类声明纯虚函数的原因:纯虚函数与虚函数不同的时,声明为纯虚函数的虚函数在基类中不使用,只是保留一个接口,具体功能交给派生类去定义。

    例如:点->圆->圆柱三个派系类中的求面积函数,对于基类点就是不会被使用的。

    抽象类

    两种抽象类:

    (1)凡是包含纯虚函数的类都是抽象类。

    (2)没有所有纯虚函数定义派生类也是抽象类。

    抽象类的特点:

    不能定义对象(因为纯虚函数不能被调用),但可以定义指针。

    抽象类的作用:

    常用作基类,为一个类族提供公共接口。

     

  • 相关阅读:
    plsql各版本官网下载地址
    docker容器启动rabbitmq并开启web控制台
    SM3杂凑算法实现
    快速设置IP、DNS等信息的bat脚本
    Windows下nginx的启动,重启,关闭等功能bat脚本
    记一次docker容器中运行springboot程序日志打印的中文变成问号
    calico 指定pod 网段
    helm 的安装使用
    K8s 节点断开连接后,本在运行的 Pod 会如何?
    nginx docker 安装ping 命令
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/4392982.html
Copyright © 2011-2022 走看看