多态的定义

2023-05-16

多态是什么?

  • 多态(polymorphism)是面向对象编程(OOP:object oriented programming)的一个重要特征,顾名思义为多种形态,详细解释为一个接口,多种实现,即方法的实现应取决于调用该方法的对象。多态分为静态多态和动态多态。
  • 静态多态编译时多态是静态多态,在编译时就可以确定使用的接口。静态多态往往通过函数重载函数模板(泛型编程)来实现。
  • 动态多态运行时多态称为动态多态,具体引用的接口在运行时才能确定。最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而调用不同的方法。在使用基类指针或引用指向子类对象时,调用的函数是子类中重写的函数,这样就实现了运行时函数地址的动态绑定,即动态联编。动态多态是通过“继承+虚函数”来实现的,只有在程序运行期间(非编译期)才能判断所引用对象的实际类型,根据其实际类型调用相应的方法。(如果没有使用虚函数,即没有利用 C++ 多态性,则利用基类指针调用相应函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用同一个函数)。
#include <iostream>
using namespace std;

class Drink{
public:
    virtual void drink(){

    }
    virtual ~Drink(){   // 如果子类在堆区申请空间,那么父类指针在delete时
                        //无法调用子类的析构,解决方法是将父类的析构设为
                        //虚析构/纯虚析构

    }
};

class Tea:public Drink{
public:
    Tea(){
        cout << "create Tea fun" << endl;
    }
    void drink(){
        cout << "drink Tea" << endl;
    }
    ~Tea(){
        cout << "destroy Tea fun" << endl;
    }
};

class Milk:public Drink{
public:
    Milk(){
        cout << "create Milk fun" << endl;
    }
    void drink(){
        cout << "drink Milk" << endl;
    }
    ~Milk(){
        cout << "destroy Milk fun" << endl;
    }
};

int main(int argc, char const *argv[])
{
    Drink* t = new Tea;   //"create Tea fun"
    t->drink();           //"drink Tea"
    delete t;             //"destroy Tea fun"
    t = NULL;

    Drink* m = new Milk;    //"create Milk fun"
    m->drink();             //"drink Milk"
    delete m;               //"destroy Milk fun"
    m = NULL;

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多态的定义 的相关文章

随机推荐

  • 基于软约束的轨迹(路径)优化原理公式推导详解

    文章目录 0 回顾1 软约束的轨迹优化1 1 方法描述1 2 顺滑性目标函数的构建及其梯度1 3 碰撞目标函数的构建及其梯度 2 软约束轨迹优化方法的优缺点3 Code 0 回顾 回顾 M i n i m
  • 哈工大李治军老师操作系统笔记【10】:内核级线程实现(Learning OS Concepts By Coding Them !)

    文章目录 0 回顾1 实现1 1 int 0x80 fork xff08 中断入口 xff09 1 2 进入核心态1 3 system call xff08 中断切换中间三段 xff09 1 4 中断出口1 3 switch to1 4 T
  • 计算机网络知识点总结(每日更新)

    文章目录 0 计算机网络概述0 1 计算机网络在信息时代的作用0 2 计算机网络的重要功能0 3 因特网概述0 3 1 理论0 3 2 三个阶段 0 4 多层次的ISP结构0 5 因特网的组成0 6 三种交换的比较0 7 性能指标0 7 1
  • 每日一题:20. 有效的括号

    文章目录 0 概览1 题解2 Code3 结果 0 概览 经典的括号问题 1 题解 栈是一种先进后出的数据结构 xff0c 处理括号问题的时候尤其有用 遇到左括号就入栈 xff0c 遇到右括号就去栈中寻找最近的左括号 xff0c 看是否匹配
  • 每日一题:915. 分割数组

    文章目录 0 概览1 题解2 题解3 结果 0 概览 最近有点忙 xff0c 没怎么更新哈哈哈 1 题解 其实我们的目的 xff0c 就是找到左边数组最大的 xff0c 以及右边数组最小的 xff0c 如果能得到的结果是左边数组最大的全部都
  • 每日一题:200. 岛屿数量

    文章目录 0 题目概览1 题解2 Code3 结果 0 题目概览 1 题解 岛屿系列问题可以用 DFS BFS 算法或者 Union Find 并查集算法 来解决用 DFS 算法解决岛屿题目是最常见的 xff0c 每次遇到一个岛屿中的陆地
  • aruco二维码

    1 二维码的生成 简单方式 xff1a 直接在下面的网站上选择 xff0c 操作简单https chev me arucogen 网站界面如下 xff1a
  • STM8S 功耗总结

    http blog sina com cn s blog 542bad910101ral2 html STM8S103 STM8S003 PA1脚虽可以用外部中断唤醒CPU xff0c 但功耗过大 xff0c 有300uA电流 xff0c
  • ESP32四轴飞控硬件设计

    一 前言 目前许多入门级开源飞控都是基于STM32系列的 xff0c 基于此系列的有非常严重的短板 xff0c 例如说通信方面 xff0c 需要外置通信模块 ESP32本身带有WIFI和蓝牙 xff0c 在通信方面有着一定的优势 xff0c
  • C++弹窗拦截程序,弹窗广告怎么关闭?不用问,我教你怎么屏蔽!

    现在大家使用电脑的频率越来越高 xff0c 上课写作业 上班做工作 娱乐生活 在家购物等 xff0c 我们使用电脑的时间越来越长 相信很多人都和小编一样 xff0c 经常遇到电脑的右下角出现出现弹窗广告的问题 要去叉掉就很麻烦 而且有时候想
  • VNC远程桌面使用方法

    参考 xff1a https blog csdn net weixin 41803874 article details 81233789 一共两台电脑 xff0c 分别为服务端和客户端 xff0c 为与场景联系方便 xff0c 我们将需要
  • 激光雷达闭环检测/地点识别算法OverlapTransformer/SeqOT(2022)

    最新激光雷达闭环检测 地点识别算法 OverlapTransformer已经完整开源 xff0c 相关论文已经被RAL IROS 2022收录 https github com haomo ai OverlapTransformer Ove
  • 我的创作纪念日

    初心未改 xff0c 继续向前
  • 最新激光雷达闭环检测/地点识别算法CVTNet(2023)

    CVTNet以激光点云多类投影生成的二维图为输入 xff0c 利用cross transformer将多类信息交叉融合 xff0c 为激光点云提取强特异性描述子 xff0c 实现SLAM闭环检测或全局定位功能 此外 xff0c CVTNet
  • python使用ffmpeg推流出现OSError: [Errno 2] No such file or directory

    python使用ffmpeg推流出现OSError Errno 2 No such file or directory 具体错误如下 xff1a Traceback span class token punctuation span mos
  • GDB调式工具学习笔记---单步执行和跟踪函数调用

    GDB调式工具学习笔记 单步执行和跟踪函数调用 简介1 单步执行和跟踪函数调用1 1 示例程序1 2 常用命令1 2 1 help1 2 2 list l 1 2 3 quit1 2 4 start1 2 5 next xff08 n xf
  • GDB调式工具学习笔记---断点

    GDB调式工具学习笔记 断点 2 断点2 1 示例代码2 2 常用命令2 2 1 display和undisplay2 2 2 break b 2 2 3 continue xff08 c xff09 2 2 4 disable2 2 6
  • C语言网络编程——UDP

    C语言网络编程 UDP 2 1 基于UDP的网络编程2 2 1 服务端实现2 2 2 客户端实现 2 1 基于UDP的网络编程 2 2 1 服务端实现 使用socket函数 xff0c 创建一个socket使用bind 函数 xff0c 绑
  • STM8S电源管理-重点活跃停机模式

    http blog sina com cn s blog 542bad910101qkru html
  • 多态的定义

    多态是什么 xff1f 多态 polymorphism 是面向对象编程 OOP object oriented programming 的一个重要特征 xff0c 顾名思义为多种形态 xff0c 详细解释为一个接口 xff0c 多种实现 x