首页 > 其他分享 >深入理解虚函数

深入理解虚函数

时间:2023-12-02 13:55:36浏览次数:21  
标签:函数 animal 多态 Cat 理解 深入 Animal cat

深入理解虚函数

什么是虚函数

我们知道面向对象有三大特性,封装、继承、多态,封装和继承就不多说了,大家比较常用,即使你是写Python的也会用到,但是多态就比较复杂了,在C++里,虚函数是实现多态的一个强大的武器。

多态在一些设计模式里比较重要,如模板模式,可以多个不同的模板来呈现同一个业务,或者策略模式里,可以实现不同的策略。也包括我们常说的里氏替换原则。

要理解虚函数,我们来看一个例子,现代人喜欢养宠物,有的喜欢猫,有的喜欢狗,我开发一个小游戏,你可以养一只猫,也可以养一只狗,也可以让他叫

不管你是猫还是狗,反正就是叫,猫就会叫“喵喵喵”,狗就会叫“汪汪汪”

怎么写这个代码呢?

比较笨的就是:

enum AnimalType = {
    CAT,
    DOG
}

AnimalType animal_type;

Cat *cat = new Cat();

Dog *dog = new Dog();

if (animal_type == CAT)
{
    cat->sound()
} else if (animal_type == DOG)
{
    dog->sound()
}

这样写,肯定不行吧,也太初级了,一定会被领导喷死吧。

那么,要怎么改呢?

就要引入一个叫虚函数的东西。

class Animal
{


}

/* 给我叫 */
Jiao(Animal *animal)
{
    animal->jiao();
}

class Cat: public Animal
{

}

class Dog: public Animal
{

}

Animal *myPet;

Cat cat

myPet = &cat;

标签:函数,animal,多态,Cat,理解,深入,Animal,cat
From: https://www.cnblogs.com/cleardo/p/17869661.html

相关文章

  • 无涯教程-D语言 - 构造与解析函数
    类构造函数类构造函数是该类的特殊成员函数,只要我们创建该类的新对象 ,该函数便会执行。构造函数的名称与类完全相同,没有任何返回类型,构造函数对于为某些成员变量设置初始值非常有用。以下示例解释了构造函数的概念-importstd.stdio;classLine{public:void......
  • 深入理解Async/Await:从原理到实践的JavaScript异步编程指南
    理解async/await的原理和使用方法是理解现代JavaScript异步编程的关键。这里我会提供一个详细的实例,涵盖原理、流程、使用方法以及一些注意事项。代码注释会尽量详尽,确保你理解每个步骤。实例:使用async/await进行异步操作<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • 深入浅出 PLT/GOT Hook与原理实践
    动态链接计算机程序链接时分两种形式:静态链接和动态链接。静态链接在链接时将所有目标文件中的代码、数据等Section都组装到可执行文件当中,并将代码中使用到的外部符号(函数、变量)都进行了重定位。因此在执行时不需要依赖其他外部模块即可执行,并且可以获得更快的启动时间和执行速......
  • 十九、函数(二)
    十九、函数(二)1、函数参数之接受不定量参数1)普通函数不定量传参用法//接受不定量参数的函数#include<cstdarg>//引入头文件cstdargintAdd(unsignedcount,...)//第一个参数为参数的个数,第二个参数为三个.{ intrt{}; char*c_arg;//声明一个指针变量 va_st......
  • 欧拉函数
    定义欧拉函数\(\phi(n)\)代表的是\([1,n]\)之间与\(n\)互质的数量。公式\(\phi(n)=n\times(1-\frac{1}{p_1})\times(1-\frac{1}{p_2})\times(1-\frac{1}{p_3})\times……\times(1-\frac{1}{p_k})\)其中:\(n\)有\(k\)个质因数,而\(p_i\)就是其中的一个......
  • 深入了解动态规划算法
    引言动态规划(DynamicProgramming,DP)是一种解决问题的算法范式,在许多领域中都有着广泛的应用。它的核心思想是将问题分解为子问题,并存储已解决的子问题的解,以避免重复计算,提高效率。动态规划的核心原理动态规划算法的成功建立在两个基本原理上:最优子结构:一个问题的最优解可以由其子......
  • matlab中绘制三维柱状图bar3函数的使用方法
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • C++学习笔记——函数探幽
    C++内联函数内联函数是一种用空间换时间的技术,是C++提高程序运行速度做的改进。运行程序时操作系统将指令载入计算机内存中,并逐条执行这些指令,遇到循环或分支时向前或向后跳转到特定的地址(每条指令都有特定的内存地址)。常规函数也是如此,在调用常规函数时立即存储该指令的地址......
  • 7、oracle迁移到postgres-逗号拼接函数listagg与string_agg
    oracle迁移到postgres-逗号拼接函数listagg与string_aggoracle中的listagg函数与postgres中的string_agg函数都可以实现逗号拼接字符1、listagg函数SELECTt.id,listagg(字段1,',')withinGROUP(ORDERBY字段1)ascheck_msg2FROMdual;within......
  • 软件测试/人工智能|Python函数与调用:解放编程力量的关键
    简介Python作为一门强大而灵活的编程语言,其函数机制为我们提供了一个重要的工具,使得代码更为模块化、可重用。在本文中,我们将深入探讨Python中函数的各个方面,包括什么是函数、内置函数、函数的定义和函数的调用,以及通过示例展示函数在实际编程中的应用。什么是函数?在Python中,......