美文网首页程序园C语言
c++ ——为什么要使用多态?

c++ ——为什么要使用多态?

作者: 编程小世界 | 来源:发表于2019-07-31 22:23 被阅读2次

多态可分为静态多态和动态多态

静态多态就是在系统编译期间 就可以确定程序执行到这里将要执行哪个函数,比如函数的重载 。

动态多态则是利用虚函数实现了运行时的多态 ,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。

虚函数就是在基类中声明该函数是虚拟的(在函数之前加virtual关键字) ,然后在子类中正式的定义(子类中的该函数的函数名,返回值,函数参数个数,参数类型,全都与基类的所声明的虚函数相同,此时才能称为重写,才符合虚函数,否则就是函数的重载),再定义一个指向基类对象的指针,然后使该指针指向由该基类派生的子类对象,再然后用这个指针来调用改虚函数,就能实现动态多态。

下面以"计算器"举例说明:

不使用多态的版本如下:

classCaculator{public:    int getResult(charfun){if(fun== '+') return a+b;elseif(fun== '-') return a-b;elseif(fun== '*') return a*b;//增加计算方式时  需要手动增删源代码 }        int a;    int b;};int main(){    charfun;Caculator x;    x.a=5;    x.b=10;    cin >>fun;cout << x.getResult(fun);}

使用多态的版本如下:

classCaculator//父类计算器 {public:virtualintgetResult(){return0;    }inta;intb;};//子类:加法器classAdd :publicCaculator{public:intgetResult(){returna+b;    }};//此处省略减法器、乘法器等。intmain(){    Caculator* c =newAdd;    c->a=1;    c->b=2;cout<< c->getResult() <

可以见得,使用多态的优点有:

1.组织结构清晰

2.可读性强

3.易于扩展,可维护性高 (tips :在实际开发中,提倡扩展而不提倡修改,也正是多态的优势所在)

如果有想学习编程的初学者,可来我们的C/C++技术学习扣qun的哦:58,934,83-89里面免费送整套系统的C/C++教程!

相关文章

  • c++ ——为什么要使用多态?

    多态可分为静态多态和动态多态 静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,比如函数的重载。...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 26号c#总结

    26号 今天开始讲多态,在c和c++中都有涉及。继承是子类使用父类的方法,而多态则是父类使用子类的方法。重点内容是...

  • C++ 20 使用concept 实现静态多态

    本例演示使用C++ 20提供的concept 实现简单的静态多态。代码如下,CMakeLists.txt main...

  • C++ 模版 学习总结

    C++ 模版 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 区块链开发课程大纲

    阶段一:C++基础入门阶段 此阶段学完之后可以理解和使用面向对象思想;熟练设计和使用类;熟练使用继承、多态、组合、...

  • pwnable.kr之uaf && c++虚函数

    c++的逆向还是要熟悉下。 一、关于c++虚函数 虚函数使得c++能够实现多态,每个类有一个虚表,每个对象在实现的...

  • C++ 虚函数表剖析

    一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍...

网友评论

    本文标题:c++ ——为什么要使用多态?

    本文链接:https://www.haomeiwen.com/subject/bbwxdctx.html