首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过指向派生类中的函数的指针调用基虚方法

是一种多态的实现方式。在面向对象的编程中,基类可以定义一个虚函数,派生类可以重写这个虚函数。通过使用指向派生类中重写虚函数的指针,可以在运行时动态地调用派生类中的函数。

这种技术可以实现动态绑定,即在编译时无法确定调用哪个函数,而是在运行时根据对象的实际类型来确定调用哪个函数。这样可以实现多态性,提高代码的灵活性和可扩展性。

优势:

  1. 灵活性:通过指针调用基虚方法可以根据对象的实际类型来确定调用哪个函数,使得代码更加灵活,可以根据不同的需求进行动态调用。
  2. 可扩展性:当需要添加新的派生类时,只需要重写基类的虚函数,并将指针指向新的函数即可,不需要修改原有的代码,提高了代码的可扩展性。

应用场景:

  1. 框架设计:在设计框架时,可以使用指向派生类中函数的指针调用基虚方法,以实现框架的扩展性和灵活性。
  2. 插件系统:在插件系统中,可以使用指向派生类中函数的指针调用基虚方法,以实现插件的动态加载和调用。

推荐的腾讯云相关产品和产品介绍链接地址:

腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf

腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm

腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke

腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb

腾讯云人工智能(AI):https://cloud.tencent.com/product/ai

腾讯云物联网(IoT):https://cloud.tencent.com/product/iot

腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile

腾讯云对象存储(COS):https://cloud.tencent.com/product/cos

腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas

腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅为示例,实际使用时请根据具体情况选择合适的腾讯云产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

派生类函数和非虚函数继承效果

,在编译阶段就确定好是被谁调用,所以他只认哪个指针指向自己,这里是Animal指针指向,所以他就调用Animal里面的,普通函数是父类为子类提供“强制实现”,也就是只要是父类指针调用普通函数,那就是父类普通函数...而函数作用,主要是为了让父类指针可以调用子类函数,这种是在运行时才决定调用哪个函数 1、函数:   C++函数主要作用是“运行时多态”,父类中提供函数实现,为子类提供默认函数实现。...子类可以重写父类函数实现子类特殊化。 2、纯函数:   C++包含纯函数类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯函数子类才能new出对象。   ...C++函数更像是“只提供申明,没有实现”,是对子类约束,是“接口继承”。   C++函数也是一种“运行时多态”。...因此,在继承关系,子类不应该重写父类普通函数,因为函数调用至于类对象字面值有关。 参考链接

8410
  • 【C++】多态 ⑧ ( 验证指向 函数 vptr 指针 | 对比定义了函数类和没有定义函数大小 )

    对比 定义了 函数 类 与 没有定义函数大小 , 其它成员都相同 , 定义了函数类多出了 4 字节 , 多出 4 字节就是 vptr 指针占用内存空间 ; 一、验证指向 函数表...1 个函数 ; 如果 没有函数 , 就不会生成函数表 ; 如果 类 中有 virtual 函数 , 则 该类 每个对象 , 都有一个 指向 函数 vptr 指针 ; 函数表 存储...函数指针 : " 函数表 " 是 存储 " 类成员函数指针 " 数据结构 , 是一个 函数指针数组 , 数组元素都是函数指针 , 具体存储都是 指向函数 指针 ; 如果 子类... , 重写了 父类 virtual 函数 , 那么 C++ 编译器会在 子类 函数表 中放入该 子类函数 函数指针 ; 如果 C++ 类存在 virtual 函数 , 在创建对象时 ,...Child c; // 将父类指针指向子类对象 p = &c; // 通过父类指针调用子类对象 fun 函数 p->fun(1); // 打印 Parent 大小 cout <<

    21240

    C++之函数作用和使用方法

    在程序修改前,是无法通过指针调用派生类对象成员函数。...函数突破了这一限制,在派生类类部分派生类函数取代了类原来函数,因此在使指针指向派生类对象后,调用函数时就调用派生类函数。...可以看到:当把某个成员函数声明为函数后,允许在其派生类对该函数重新定义,赋予它新功能,并且可以通过指向指针指向同一类族不同类对象,从而调用其中同名函数。...如果在派生类没有对函数重新定义,则派生类简单地继承其直接函数。 定义一个指向类对象指针变量,并使它指向同一类族需要调用函数对象。...通过指针变量调用函数,此时调用就是指针变量指向对象同名函数通过函数指向类对象指针变量配合使用,就能方便地调用同一类族不同类同名函数,只要先用指针指向即可。

    1.4K80

    C++反汇编第三讲,反汇编识别指针,以及指向函数地址

    C++反汇编第三讲,反汇编识别指针,以及指向函数地址 讲解之前,了解下什么是函数,什么是指针,了解下语法,(也算复习了) 开发知识为了不码字了,找了一篇介绍比较好,这里我扣过来了...定义他为函数是为了允许用指针调用子类这个函数。 定义一个函数为纯函数,才代表函数没有被实现。...由于编写代码时候并不能确定被调用函数还是哪个派生类函数,所以被成为“函数函数只能借助于指针或者引用来达到多态效果。...熟悉了指针, 通过指针找构造,析构,以及指针指向表找函数,那么我们看一下普通成员函数调用函数调用有什么区别....  1.普通成员函数直接调用Call   2.函数通过指针指向表来间接调用.

    1.5K60

    必知必会之C++多态机制

    具体来说,多态性允许指针或引用在运行时指向派生类对象,并且根据对象实际类型来调用相应成员函数。 多态性是通过函数来实现。...派生类重写函数派生类可以通过重写(覆盖)函数来提供自己实现。在调用这个函数时,会根据对象实际类型来决定调用哪个版本函数。...在 main() 函数,我们创建了 Dog 和 Cat 类对象,并将指针指向这些对象,然后通过指针调用函数 makeSound()。...方法调用 在 C++ ,如果父类通过指针或引用调用一个函数,而这个函数在子类中被重写(override),那么调用实际方法将取决于指针或引用所指向对象类型。这就是多态体现。...具体来说,如果父类指针或引用指向是子类对象,那么调用方法将是子类重写版本;如果指针或引用指向是父类对象,那么调用方法将是父类版本。

    13910

    十一、多态

    即,需要使用类类型指针或引用来指向子类对象,并通过指针或引用来调用函数。 原理:在运行时,程序会根据指针或引用所指向对象实际类型,在函数查找并调用相应函数版本。...多态意义 提高代码复用性和可扩展性: 多态允许使用类类型指针或引用来引用派生类对象,这样就可以通过指针或引用来调用派生类方法,而无需知道具体派生类类型。...当通过指针删除派生类对象时,如果析构函数不是,那么只会调用析构函数,而不会调用派生类析构函数。...: 函数允许在派生类重写成员函数,并通过指针或引用来调用派生类函数实现,从而实现多态。...调用:当通过对象指针或引用来调用函数时,编译器会首先查找这个指针或引用所指向对象函数指针,然后通过这个指针找到函数对应函数地址,最后调用这个函数

    8310

    【C++】模板继承多态

    四: 如果派生类方法类继承来某个方法,返回值,函数名,参数列表都相同,而且方法是virtual函数,那么派生类这个方法,自动处理成函数。...static静态成员方法 (错误) 析构函数 (可以) 析构函数调用时,对象是存在 函数函数派生类析构函数自动变成函数指针(引用)指向堆上new出来派生类对象时候...在类构造函数当中,调用函数,也是静态绑定(构造函数调用其他 函数)不会发生动态绑定) 如果不是通过指针或者引用变量来调用函数,那就是静态绑定。...(引用)调用同名覆盖方法函数),指针指向哪个派生类对象,就会调用哪个派生类对象同名覆盖方法。...多态底层是通过动态绑定来实现。pbase 指向谁就访问谁vfptr,从而继续访问谁vftable,也就调用对应派生类对象方法了。

    9910

    C++基础-多态

    这种情况未启用多态机制 如果 Swim() 是函数,那么运行时会根据类引用(或指针)指向具体对象,调用对象所属方法。...若指向派生类对象则调用派生类方法,若指向类对象则调用方法。...这种情况使用了多态机制 使用指针或引用指向类或派生类对象,运行时调用对象所属类(具有继承层次关系类或派生类)方法,这就是多态。...换句话说,对于使用 new 在堆内存实例化派生类对象,如果将其赋给指针,并通过指针调用 delete,如果类析构函数不是函数,delete 将按类析构方式来析构此指针,如果类析构函数函数...C++关键字 virtual 被用于实现两个不同概念,其含义随上下文而异,如下: 在函数声明, virtual 意味着当指针指向派生对象时,通过它可调用派生类相应函数

    85720

    C++函数

    函数是动态多态性基础,其调用方式是动态联编(又称晚期联编,简单解释为只有在程序运行时才决定调用还是子类,系统会根据指针指向对象来决定要调用函数); 非虚函数与其相反,...如果在派生类没有对函数重新定义,派生类简单地继承其直接函数。 (3)定义一个指向类对象指针变量,并使它指向同一类族需要调用函数对象。...(4)通过指针变量调用函数,此时调用就是指针变量指向对象同名函数。    ...通过函数指向类对象指针变量配合使用,就能方便地调用同一类同名函数,只要先用指针指向即可。     如果指针不断地指向同一类族不同类对象,就能不断地调用这些对象同名函数。...(3)应该考虑成员函数调用通过对象名还是通过指针或引用去访问,如果是通过指针或引用去访问,则应当什么为函数。 (4)有时在定义函数时,并不定义其函数体,即函数体是空

    1.1K30

    【C++篇】境探微:多态流动诗篇,解锁动态艺术密码

    当程序调用函数时,实际调用流程如下: 通过对象找到指针(vptr)。 根据函数偏移量,从获取函数指针通过函数指针进行实际函数调用。...多态需求强场景:当需要通过指针或引用调用派生类不同实现时,动态绑定是必不可少函数通过表机制,可以在运行时调用不同派生类函数。...当派生类重写了函数时,函数指针会被派生类函数指针替换。如果派生类定义了新函数,这些新函数指针将会追加到派生类表末尾。...派生类可以通过这个调用函数。 重写函数:如果派生类重写了函数,则派生类相应函数指针将会被覆盖为派生类函数实现,重写函数替换函数。...3.3.4 调用过程解析 当我们调用 Final 类对象 func() 方法时,虚拟继承保证调用过程如下: Final 类 vptr(函数指针指向唯一 Base 类实例函数表。

    12410

    C++学习——函数与纯函数

    2、实现这种动态多态性时,必须使用类类型指针变量,并使该 指针指向不同派生类对象,并通过调用指针指向函数才能实现 动态多态性。...函数访问 用指针访问与用对象名访问区别: 1、用指针访问函数时,指向其实际派生类对象重新定义函数。实 现动态聚束。 2、通过一个对象名访问时,只能静态聚束。...但 可以定义指向抽象类指针,即指向这种指针。当用这种指针指向派生类对象时,必须在派生类重载纯函数,否则会 产生程序运行错误。...若要访 问类私有成员函数,必须通过其它公有成员函数。 5、当一个成员函数指针指向一个函数,且通过指向对象指针或对象 引用来访问该成员函数指针时,同样地产生运行时多态性。...类为形状类,派生类为矩形类和三角形类,通过指针指向不同派生类对象,调用求面积函数,得到相应面积结果,实现多态性。

    2.7K20

    剖析多态原理及实现

    必须通过指针或引用来调用函数。...多态实现 基本条件 通过指针或引用调用函数:多态前提是通过指针或引用来访问派生类对象。...只有指针或引用才能够指向不同派生类对象,并且根据派生类对象实际类型,决定具体调用哪个函数。...如果类析构函数不是函数,那么通过指针删除派生类对象时,只会调用析构函数派生类析构函数不会被调用,导致资源无法释放。...当通过指针调用show函数时,具体调用哪个函数取决于实际对象类型。 隐藏(Hiding) 隐藏是指在派生类定义了一个与类同名但非虚函数,此时同名函数会被隐藏。

    13810

    【C++进阶】多态,这样学才够清楚

    多态删除:在使用多态时(即指针指向派生类对象),如果通过指针删除派生类对象,并且类析构函数没有被声明为函数,那么只会调用析构函数,而不会调用派生类析构函数。...需要注意是,即使你不需要在派生类析构函数执行任何特定清理工作,如果你打算通过指针来删除派生类对象,并且想要确保派生类对象资源被正确释放,你也应该将析构函数声明为函数。...这样做可以确保当通过指针删除派生类对象时,派生类析构函数也会被调用。...当通过指针或引用调用函数时,程序会首先查找该指针指向函数表,然后根据表存储地址来调用相应函数。 | 最后有一个问题:函数存在哪里?表存在哪里?...当通过指针或引用调用函数时,会根据指针或引用实际指向对象类型来调用相应函数版本,这称为动态绑定。 2.3 动态绑定和静态绑定 静态绑定,也称为早期绑定,指的是函数调用在编译时期就已经确定。

    6110

    【C++】多态(定义、函数、重写、隐藏)

    继承要构成多态还有两个条件: 必须通过指针或者引用调用函数调用函数必须是函数,且派生类必须对函数进行重写 如果是通过指针调用函数,要如下图所示使用: 函数 函数...即函数返回类对象指针或者引用,派生类函数返回派生类对象指针或者引用时,称为协变。 返回值类型必须是指针或者引用,且具有父子关系(即继承)。...虽然Car不能实例化对象,但是可以用它指针指向子类,然后调用。 接口继承和实现继承 普通函数继承是一种实现继承,派生类继承了函数,可以使用函数,继承函数实 现。...派生类表生成:1.先将表内容拷贝一份到派生类 2.如果派生类重写了某个函数,用派生类自己函数覆盖函数 3.派生类自己新增加函数按其在派生类声明次序增加到派生类最后...类引用引用子类对象后,通过类对象调用f2时,调用是子类f2(错) 解释:通过对象调用时编译期间就直接确定调用那个函数了,不会通过表以多态方式调用 3 虽然进行了强转,pa指向依旧是是B

    16010

    C++ 多态、函数、纯函数《Rice C++ 学习开发》

    静态多态:调用函数被编译器设置为版本,函数调用在程序执行前就决定了好了,这就是所谓静态多态,或静态链接。 动态多态:派生类对象地址可以赋值给指针。...对于通过指针调用类和派生类中都有的同名、同参数表函数语句,编译时并不确定要执行类还是派生类函数;而当程序运行到该语句时,如果指针指向是一个类对象,则函数调用,如果指针指向是一个派生类对象...动态多态: 静态多态变成动态多态,需要稍微修改一下代码,通过函数方法来实现动态链接。在函数前添加virtual。函数是一种在类定义为virtual函数,并在一个或多个派生类再定义函数。...: 您可能想要在定义函数,以便在派生类重新定义该函数更好地适用于对象,但是您在又不能对函数给出有意义实现,这个时候就会用到纯函数。...,如果派生类重写了函数,则调用子类函数,否则调用函数

    33020

    深入浅出C++函数vptr与vtable

    此表每个条目只是一个函数指针指向该类可访问最派生函数。 其次,编译器还会添加一个隐藏指向指针,我们称之为vptr。vptr在创建类实例时自动设置,以便指向该类虚拟表。...(); cout<<"类引用指向派生类实例"<<endl; pp.fun1(); cout<<"指针指向派生类实例并调用函数"<<endl; pt->fun1(...Base::fun1() 类引用指向派生类实例 Base::fun1() 指针指向派生类实例并调用函数 Derived::fun1() 类引用指向类实例并调用函数 Derived::fun1...简单说,通过virtual函数指向子类指针可以调用子类函数。...例如,上述通过指针指向派生类实例,并调用函数,将上述代码简化为: Base *pt = new Derived(); // 指针指向派生类实例 cout<<"指针指向派生类实例并调用函数

    4.3K30

    掌握了多态特性,写英雄联盟代码更少啦!

    多态表现形式一 「派生类指针」可以赋给「指针」; 通过指针调用类和派生类同名「函数」时: 若该指针指向一个对象,那么被调用函数; 若该指针指向一个派生类对象,那么被调用...— — || 03 多态表现形式二 派生类对象可以赋给类「引用」 通过类引用调用类和派生类同名「函数」时: 若该引用引用是一个对象,那么被调 用是函数; 若该引用引用是一个派生类对象...成员函数,所以调用bye成员函数 ---- — 5 — 多态实现原理 「多态」关键在于通过指针或引用调用一个函数时,编译时不能确定到底调用类还是派生类函数,运行时才能确定。...多态函数调用语句被编译成一系列根据指针指向(或类引用所引用)对象存放函数地址,在函数查找函数地址,并调用函数指令。...那么在多态情景下,通过指针删除派生类对象时,通常情况下只调用析构函数,这就会存在派生类对象析构函数没有调用到,存在资源泄露情况。

    52510

    C++|对象模型|多继承机制实现

    本文参考深度探索C++对象模型 ---- 我们常常使用指针指向派生类对象,那么,为什么指针能够如此轻松调用派生类方法呢?在多继承情况下,this指针必须经过调整,才能正确地找到表。...(派生类假设无额外成员) 后[Derived[BASE1][BASE2]]前 有三种情况,指针会发生偏移。 ---- 使用指针指向派生类 赋值时:派生-> 派生类指针转型为第二个指针。...向前调整Base1长度以正确指向Base2。 调用时:->派生 指向第二个指针调用派生类函数。...调用时:派生-> 指向派生类指针调用第二个类继承来函数。...,通过thunks跳转至对应进入点 address points: 函数期待获得是引入函数类对象地址(而非派生类),这就是这个函数address point。

    52720

    C++基础多态(PolyMorphism)

    函数派生类定义了于类相同函数,使用指针指向派生类对象时,通过指针调用函数而不是派生类函数。...编译器做法不是我们期望,根据实际对象类型来判断重写函数调用,如果父类指针指向是父类对象则调用父类定义函数,如果父类指针指向是子类对象则调用子类定义重写函数。   ...纯函数是在声明函数,它在没有定义,但要求任何派生类都要定义自己实现方法。...同时抽象类只能作为类来使用,其纯函数实现由派生类给出。如果派生类没有重新定义纯函数,而只是继承函数,则这个派生类仍然还是一个抽象类。...如果派生类给出了类纯函数实现,则该派生类就不再是抽象类了,它是一个可以建立对象具体类。

    49030
    领券