c++的复习——多态

关于多态,有静态和动态两种多态,静态多态有模板,函数重载,静态多态相比动态,就是我在编译的时候我就知道了调用谁,函数重载简单介绍一下就是同一作用域下同一个函数名,参数顺序,个数,类型不相同,满足这种情况下就是函数重载,编译器根据参数来决定调用哪个函数,我们要注意,在两个没有继承关系的类中出现相同的参数的成员函数时,这个不是动态多态,成员函数有一个this指针,这两个类的指针是不同的,有的可能是A的this指针有的可能是B的this指针。如果此时两个有相同成员函数的类进行继承关系,此时就是函数隐藏了(其实只要函数名相同就行,参数不用管),但是还是静态多态,为什么说是函数隐藏,因为编译时我们还是知道调用的是哪个函数,在静态多态中,此时编译器编译只需要看传入的指针类型,不需要管指针指向的是哪个,根据指针类型来匹配调用的函数

动态多态就是虚函数和继承,首先说说虚函数,就是virtual关键字,在一个成员函数前面加个关键字就是虚函数了,虚函数加了,此时我们子类中会有虚函数指针,这个等会再提,此时我们调用函数时,不会看指针类型了而是看实际的对象是谁,此时虚函数指针会指向一个虚函数表,这个表中存储的是函数地址,在编译阶段时虚函数表会被构造,所有的对象共享一个虚函数表,在子类重写虚函数即在参数个数顺序和类型相同情况下重新写这个函数,重写这个函数后,虚表中的虚函数地址替换为自己的,简单点讲:

首先是father *p=new son ,p.fun()时,因为有虚函数,所以我们不知道时调用father的fun还是son的fun,需要通过指针来找,就时vptr这个虚函数指针,这个指针指向的虚函数表,可以在这个表中寻找地址,如果没有重写,此时vptr找到的就是father的fun,如果重写了就是子类的fun了,这种我们运行时才知道的叫多态

多态的用途在哪?为什么要一会调用父类一会调用子类。我是这么理解的,就拿cs这个枪战游戏说吧,我们在编写角色武器时,我们有不同的开火逻辑,awp是开一枪,伤害高,ak能连发,伤害相对低,这里我们的角色会根据不同的武器来执行不同的开火逻辑,这里就可以用多态的方式,用一个武器类作为父类,子类有多种awp,ak,a1之类的枪械,我们创造了父类指针指向子,此时对父类的开火函数fire加一个虚函数,子类重写这个虚函数,这样我们调用函数的时候会根据指针指向的对象中的vptr来决定调用哪武器开火逻辑,这是一个例子,多态可以让代码更加规范

相关推荐
云泽80819 分钟前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
Tri_Function1 小时前
简单图论大学习
c++
lqqjuly1 小时前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23
王老师青少年编程2 小时前
信奥赛C++提高组csp-s之FHQ Treap
c++·csp·平衡树·信奥赛·csp-s·提高组·fhq treap
星恒随风2 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++2 小时前
java 并发编程
java·开发语言·python
罗超驿2 小时前
18.Web API 实战:元素与表单属性的获取和修改
开发语言·前端·javascript
被子你放开我3 小时前
CRMEB PHP多商户升级4.0太麻烦了
开发语言·php
阿里嘎多学长3 小时前
2026-06-01 GitHub 热点项目精选
开发语言·程序员·github·代码托管