首页 > 其他分享 >多态的实现

多态的实现

时间:2023-03-31 13:24:14浏览次数:32  
标签:函数 实现 派生类 多态 析构 基类 include

多态的实现

  • 定义:由继承加虚函数实现

  • 分类:
    - 静态多态(重载):在编译时期就决定调用的函数,根据参数列表来决定。
    - 动态多态(子类重写父类的虚函数来实现)在运行期间决定

  • 虚函数相关:

    • 类中含有虚函数时,编译器会为该类生成一个虚函数表,保存该类的虚函数地址
    • 派生类继承基类时,编译器也会为派生类生成自己的虚函数表
    • 当有一个基类指针指向派生类,当调用虚函数时,会调用该派生类重写的虚函数;也就是可以调用派生类虚函数表中的虚函数以实现多态。

例如:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;



class  Base
{
public:
    void  virtual  Func()
    {
        cout << "Base\n";
    }
};

class  Derived : public  Base
{
public:
    void  Func()
    {
        cout << "Derived\n";
    }

    void  NewFunc()
    {
        cout << "New func\n";
    }
};
//父类指针1.虚函数使用:是根据实力的对象类型选择调用的函数     2.指针强转
void main()
{



    /*  Derived* a = new Derived;
      a->Func();*/



    Base* b = new  Derived();
    b->Func();

    //安全转换
    Derived* d = dynamic_cast <Derived*>(b);
    if (d != NULL)
    {
        d->NewFunc();
    }

    return;
}

析构函数写成虚函数

  • 目的:降低内存泄漏的可能性
  • 若存在一个基类指向派生类的对象,使用完毕准备销毁时,若基类的析构函数未定义成虚函数时,编译器就会认为当前对象的类型是基类,仅执行基类的析构函数,派生类的内容无法析构,造成内存泄露。

标签:函数,实现,派生类,多态,析构,基类,include
From: https://www.cnblogs.com/return-study-wa/p/17275962.html

相关文章

  • js 实现 类继承 通过super 给父级传参的效果
    通过es5实现类继承通过super给父级传参的效果先看看原型继承functiones5parent(name,age){this.name=name;this.age=age;}es5parent.prototype.say=function(){console.log(this.name,this.age,this.sex);}functiones5chil......
  • android popwindow实现左侧弹出菜…
    http://www.apkbus.com/android-44903-1-1.html学习一下PopupWindow的浮层显示效果。PopupWindow可以实现浮层效果,主要方法有:可以自定义view,通过LayoutInflator方法;可以出现和退出时显示动画;可以指定显示位置等。为了将PopupWindow的多个功能展现并力求用简单的代码实......
  • ckeditor如何能实现直接粘贴把图片上传到服务器中
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘贴的原理,通过TheViper找到粘贴图片的方法。其原理为一下步骤:监听粘贴事件;【用于插入图片】获取光标位置;【......
  • 利用Jackson序列化实现数据脱敏
    作者:京东物流张晓旭1.背景在项目中有些敏感信息不能直接展示,比如客户手机号、身份证、车牌号等信息,展示时均需要进行数据脱敏,防止泄露客户隐私。脱敏即是对数据的部分信息用脱敏符号(*)处理。2.目标在服务端返回数据时,利用Jackson序列化完成数据脱敏,达到对敏感信息脱敏展示。降低重......
  • Flask框架 之使用蓝图实现模块划分
     一、示例代码run.pyfromappimportcreate_appif__name__=='__main__':app=create_app()app.run(debug=True,port=5000)__init__.pyfromflaskimportFlaskfromapp.controllersimportconfig_blueprintdefcreate_app():app=Fla......
  • fckeditor如何能实现直接粘贴把图片上传到服务器中
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能够接......
  • 基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制
    基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制,坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM。都是通过Verilog语言来实现的,具有很高的研究价值。   ......
  • 纯CSS3实现多行文本截断
    纯CSS处理多行文本展开和收起,直接上代码和效果图1<html>2<header>3<style>4.wrap{5position:relative;6padding:5px25px25px;7border-radius:5px;8box-shadow:05px20px3px#cc......
  • css实现横向滚动文字
    css如何做横向滚动文字在css中,想要实现横向滚动的文字,需要利用animation属性和@keyframes规则来实现元素缩放的动画效果,通过@keyframes规则,能够创建动画。创建动画的原理是,将一套CSS样式逐渐变化为另一套样式。在动画过程中,您能够多次改变这套CSS样式。以百分比来规定改......
  • 排队论——系统运行指标的R语言实现
    排队论也称随机服务系统理论,排队论又叫随机服务系统理论或公用事业管理中的数学方法。它是研究各种各样的排队现象的。它所要解决的主要问题是:在排队现象中设法寻求能够达到服务标准的最少设备,使得在满足服务对象条件下,服务机构的花费最为经济,使服务系统效率最高。排队现象作为......