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

如何使用父类型绑定过程使类型绑定多态指针指向扩展类型?

使用父类型绑定过程可以实现类型绑定多态,使指针指向扩展类型。父类型绑定是一种动态绑定的机制,它允许在运行时根据对象的实际类型来确定调用哪个方法或访问哪个属性。

在面向对象编程中,父类型可以作为多个子类型的基类或接口。通过将子类型的对象赋值给父类型的指针,可以实现类型的多态性。这样一来,无论指针指向的是父类型还是子类型的对象,都可以通过该指针调用父类型中定义的方法或属性。

具体实现父类型绑定过程的步骤如下:

  1. 定义父类型和子类型:首先需要定义一个父类型和一个或多个子类型。父类型应该包含子类型共有的方法和属性,以及定义一个虚函数(在C++中使用关键字virtual)作为多态的入口。
  2. 子类型继承父类型:子类型需要继承父类型,并且可以在子类型中扩展父类型的方法和属性。子类型可以重写父类型的虚函数,以实现自己的逻辑。
  3. 创建对象并进行类型转换:根据需要创建子类型的对象,并将其赋值给父类型的指针。这样可以实现类型的多态性,即通过父类型的指针调用子类型的方法。
  4. 调用方法:通过父类型的指针调用方法时,会根据实际对象的类型来确定调用哪个方法。如果子类型重写了父类型的虚函数,那么将调用子类型的方法;否则,将调用父类型的方法。

使用父类型绑定过程可以实现灵活的类型绑定和多态性,使代码更具扩展性和可维护性。在实际应用中,父类型绑定常用于设计模式中的多态、抽象工厂、策略模式等场景。

腾讯云提供了丰富的云计算产品和服务,包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

【C++】继承 ⑥ ( 类型兼容性原则 | 指针 指向 子类对象 | 使用 子类对象 为 类对象 进行初始化 )

" 应用场景 : 直接使用 : 使用 子类对象 作为 类对象 使用 ; 赋值 : 将 子类对象 赋值给 类对象 ; 初始化 : 使用 子类对象 为 类对象 初始化 ; 指针 : 指针 指向...子类对象 , 指针 值为 子类对象 在 堆内存 的地址 , 也就是 将 子类对象 地址 赋值给 类型指针 ; 引用 : 类引用 引用 子类对象 , 将 子类对象 赋值给 类型的引用 ; 二...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; 该原则的应用场景如下 : 定义函数 , 接收 指针...// 通过指针调用类函数 p_parent->funParent(); // 将指向子类对象的指针传给接收指针的函数 // 也是可以的 fun_pointer...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; // 通过指针调用类函数

13600

iOS中的多态

什么是多态 多态一般都要跟继承结合起来说,其本质是子类通过覆盖或重载类的方法,来使得对同一类对象同一方法的调用产生不同的结果。...程序中的多态指针指向子类对象 多态的原理 动态绑定 动态类型能使程序直到执行时才确定对象的真实类型 动态类型绑定能使程序直到执行时才确定要对那个对象调用的方法 多态条件 有继承关系 子类重写类方法...指针指向子类对象 程序中的表现 指针指向不同子类对象的时候,通过指针调用被重写的方法的时候,会执行该指针指向的那个对象的方法 应用场景 提高了代码的扩展多态优点 多态的主要好处是简化了编程接口...,这样使得代码扩展性和复用性特别好,当一个新的情景出现时,只需要增加一个新的类和新的同名方法 注意点 如果指针指向子类对象,如果需要调用子类特有的方法,必须先强制类型转换为子类才能调用 如果存在多态...,类是可以访问子类特有的方法 如果不存在多态类是不可以访问子类特有方法的 @interface Phone : NSObject @property (nonatomic,strong) NSString

15410

硬核 | C++ 基础大全

如何避免使用指针?在平时的编码中,养成在定义指针后且在使用之前完成初始化的习惯或者使用智能指针。 说一下 const 修饰指针如何区分?...动态多态的实现与虚函数表,虚函数指针相关。 扩展: 子类是否要重写类的虚函数?子类继承类时, 类的纯虚函数必须重写,否则子类也是一个虚类不可实例化。...举例来说就是,一个基类的指针指向一个派生类的对象,在使用完毕准备销毁时,如果基类的析构函数没有定义成虚函数,那 么编译器根据指针类型就会认为当前对象的类型是基类,调用基类的析构函数 (该对象的析构函数的函数地址早就被绑定为基类的析构函数...程序员定义的析构函数被扩展过程?...构造函数的扩展过程

1.2K10

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

unsetunset指针指向子类对象unsetunset 在 C++ 中,可以使用类的指针指向子类的对象,这是实现多态的一种常见方式。...这在面向对象编程中是非常有用的,因为它使代码更加灵活和可扩展。...下面是一个简单的示例说明了如何使用类的指针指向子类的对象: #include // 基类 class Base { public: virtual void display...方法调用 在 C++ 中,如果类通过指针或引用调用一个虚函数,而这个虚函数在子类中被重写(override),那么调用的实际方法将取决于指针或引用所指向的对象的类型。这就是多态的体现。...具体来说,如果指针或引用指向的是子类对象,那么调用的方法将是子类中重写的版本;如果指针或引用指向的是类对象,那么调用的方法将是类中的版本。

10710

CC++面试常问题集(2)

9、多态,虚函数,纯虚函数? 多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的指针或引用指向子类的对象。...可以使用接口类指针指向其子类对象,并调用子类对象中实现的接口类中纯虚函数。 不能使用接口类实例化对象。 10、解释静态绑定和动态绑定?...就是基类的指针或引用有可能指向不同的派生类对象,对于非虚函数,执行时实际调用该函数的对象类型即为该指针或引用的静态类型(基类类型);而对于虚函数,执行时实际调用该函数的对象类型为该指针或引用所指对象的实际类型...只有虚函数才使用的是动态绑定,其他的全部是静态绑定 11、指针和引用的定义和性质区别: 指针和引用存放的都是所指对象的地址 (1)指针指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元...返回类型为void*,必须强制类型转换对应类型指针,new则直接返回对应类型指针; 8、对于malloc分配内存后,若在使用过程中内存分配不够或太多,这时可以使用realloc函数对其进行扩充或缩小,但是

1.1K10

Java 多态的实现机制

,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。...要使用多态,在声明对象时就应该遵循一条法则:声明的总是类型或接口类型,创建的是实际类型。...虚拟机会在执行程序时动态调用实际类的方法,它会通过一种名为动态绑定(又称延迟绑定)的机制自动实现,这个过程对程序员来说是透明的。...在JVM执行Java字节码时,类型信息被存放在方法区中,通常为了优化对象调用方法的速度,方法区的类型信息中增加一个指针,该指针指向一张记录该类方法入口的表(称为方法表),表中的每一项都是指向相应方法的指针...当使用invokeinterface指令调用方法时,就不能采用固定偏移量的办法,只能老老实实挨个找了(当然实际实现并不一定如此,JVM规范并没有规定究竟如何实现这种查找,不同的JVM实现可以有不同的优化算法来提高搜索效率

61710

C++:45---多态

一、多态介绍 面向对象的核心思想是多态性,其含义是“多种形式” 概念:在子类覆盖了类函数的情况下,用类的指针(或引用)调用子类对象,或者通过指针调用覆盖函数的时候(动态绑定),实际上调用的是子类的覆盖版本...,这种现象叫做多态 注意事项: 只有用类的指针(或引用)调用子类对象多态才会产生,非指针/引用不会产生多态 且只有用类的指针(或引用)调用虚函数才会产生多态,调用非虚函数不会产生多态效果 运行时解析...: 当我们使用基类的引用或指针调用基类中定义的一个虚函数时,我们并不知道该函数真正作用的对象是什么类型,因为它可能是一个基类的对象也可能是一个派生类的对象 如果该函数是虚函数,则直到运行时才会决定到底执行哪个版本...非虚函数的调用在编译时进行绑定的,类似的,通过对象进行的函数(虚函数或非虚函数)调用也在编译时绑定 二、多态的条件 父子类之间有覆盖关系 基类必须通过引用或指针指向子类,然后再调用虚函数,此时就可以实现多态...四、virtual函数的缺省参数值是静态绑定的 五、多态的实现方式(面试) 1.必须有继承关系 2.父子类之间有重写(覆盖) 3.类的指针指向于子类,或类的引用指向于子类 4.通过类的指针或引用调用成员方法

32110

八股文-如何理解Java中的多态

必要条件: 继承或者实现接口 子类重写类的方法 类的引用指向子类的对象 多态的实现原理 多态的实现原理涉及到动态绑定和虚拟方法调用。这两个概念有助于理解在运行时如何实现多态性。...动态绑定(Dynamic Binding) 动态绑定多态性的基础,它使得在运行时能够确定对象的实际类型,并调用相应类型的方法。...动态绑定:当对象被创建时,会在内存中分配一个虚拟方法表(VMT)或类似的机制,用于存储对象的方法地址。这个表与对象的实际类型相关联。 引用变量赋值:引用变量指向对象。...在多态中,类型的引用变量可以指向子类对象。 虚拟方法调用:当调用对象的方法时,引用变量根据实际类型找到对象的虚拟方法表,然后根据方法的签名找到相应的方法地址。这个过程是动态的,发生在运行时。...集合中的多态 Java中的集合类(如List、Map)经常使用多态性,允许存储不同类型的对象,使得代码更加通用和灵活。 框架和设计模式 多态性是许多设计模式(如策略模式、工厂模式)和框架的基础。

15710

Java多态的实现机制是什么,写得非常好!

,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。...要使用多态,在声明对象时就应该遵循一条法则:声明的总是类型或接口类型,创建的是实际类型。...虚拟机会在执行程序时动态调用实际类的方法,它会通过一种名为动态绑定(又称延迟绑定)的机制自动实现,这个过程对程序员来说是透明的。...在JVM执行Java字节码时,类型信息被存放在方法区中,通常为了优化对象调用方法的速度,方法区的类型信息中增加一个指针,该指针指向一张记录该类方法入口的表(称为方法表),表中的每一项都是指向相应方法的指针...前面说过,方法表中的表项都是指向该类对应方法的指针,这里就开始了多态的实现: 假设Class A是Class B的子类,并且A改写了B的方法method(),那么在B的方法表中,method方法的指针指向的就是

7.6K10

【C++】多态

普通调用和多态调用 多态调用: 像什么 BuyTicket 函数的调用我们就称为多态调用,多态调用必须满足构成多态的几种条件 – 继承、虚函数重写、由类的指针/引用来调用虚函数,多态调用与调用此函数的对象指向...,再加上 this 指针类型是 A*,满足多态条件,所以这里是一个多态调用,多态调用看调用对象指向类型,this 指向 p 中属于类的那一部分,所以 this 指向类型是 B,调用 B 的 func...2、然而当调用 Func1 时,由于 func1 是虚函数,且子类对其进行了重写,再加上是类的指针去调用,所以这里满足多态调用;此时调用与对象指向类型有关,当 ptr 指向类对象 b 时,调用类的...总结: 当进行多态调用时,指针 ptr 如果指向的是类对象,就去类对象的虚表里面取被调函数的地址,此时取出来的地址是类的虚函数地址; 如果指向的是子类对象中类的那一部分,则去子类对象中属于类对象那部分中找到虚表...动态绑定又称运行时绑定,它是在程序运行期间,根据具体拿到的类型确定程序的具体行为,调用具体的函数,也称为动态多态;像多态调用这种,在运行时去指向的对象的虚表中取被调虚函数的地址,根据取得的地址来调用具体的虚函数的行为就是典型的动态绑定

44800

【C++】非常重要的——多态

); func(s); } 那么我们可以发现: 普通调用跟调用对象的类型有关; 多态调用必须是类的指针或者引用,无论是是哪个对象传,他都会指向该对象中类的那一部分(切片),进而调用该对象中的虚函数...我们知道: delete有两种行为:1.使用指针调用析构函数;2.operator delete(ptr) 所以使用指针调用析构函数是普通调用(不满足多态调用的条件),普通调用是跟调用的对象类型有关,类型都是...this的类型是A*,因为test处于A类中,继承到B中,也会原封不动的继承过去,this依然是A*,所以类的指针调用虚函数,满足多态的调用,多态调用是看指针指向的对象,又因为p调用的test,所以指针指向...(一句话,我也不知道我调用谁,我指向谁,就调用谁的虚函数,进而完成动态绑定,完成多态调用)  静态绑定:编译时,通过类型就确定调用函数的地址,然后直接call完成调用 通过反汇编可以看到: 静态绑定...多态分为静态多态和动态多态; 静态多态是在编译时,自动和所调用的类型绑定,从而确定函数地址,直接调用 动态多态是在运行时,根据指针指向的对象,指向类调类的虚函数,指向子类调子类中类那部分重写以后的虚函数

33230

【ES三周年】C++多态

s);} 图片 那么我们可以发现: 普通调用跟调用对象的类型有关; 多态调用必须是类的指针或者引用,无论是是哪个对象传,他都会指向该对象中类的那一部分(切片),进而调用该对象中的虚函数。...我们知道: delete有两种行为:1.使用指针调用析构函数;2.operator delete(ptr) 所以使用指针调用析构函数是普通调用(不满足多态调用的条件),普通调用是跟调用的对象类型有关,类型都是...this的类型是A*,因为test处于A类中,继承到B中,也会原封不动的继承过去,this依然是A*,所以类的指针调用虚函数,满足多态的调用,多态调用是看指针指向的对象,又因为p调用的test,所以指针指向...(一句话,我也不知道我调用谁,我指向谁,就调用谁的虚函数,进而完成动态绑定,完成多态调用)  静态绑定:编译时,通过类型就确定调用函数的地址,然后直接call完成调用 通过反汇编可以看到: 图片 静态绑定...多态分为静态多态和动态多态; 静态多态是在编译时,自动和所调用的类型绑定,从而确定函数地址,直接调用 动态多态是在运行时,根据指针指向的对象,指向类调类的虚函数,指向子类调子类中类那部分重写以后的虚函数

386100

面向对象之封装和多态

多态(polymorphism) 多态性是 OOP 中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。...这对于大型系统来说能提高系统的灵活性和扩展性。 多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。 为什么需要多态?...多态性是指允许不同类的对象对同一消息作出不同的响应。 java 中如何实现多态 ? 使用多态的好处 ? 引用变量的两种类型: 编译时类型(模糊一点,一般是一个类)由声明时的类型决定。...多态的存在要有3个必要条件:要有继承,要有方法重写,类引用指向子类对象引用。 4. 小口诀:编译看左边,运行看右边。 对象的转型(casting) 为什么需要强制转换类型?...对应上面那个代码的例子: ((Circle) shape).area(); 一个类的引用类型变量可以“指向”其子类的对象。 一个类的引用不可以访问其子类对象新增加的成员(属性和方法)。

44610

【专业技术】C++虚函数的缺省参数

很明显,这段代码的输出结果依赖于C++的多态。什么是多态?在C++中,多态表现为指向类对象的指针(或引用)指向子类对象,然后利用指针(或引用)调用它实际指向的子类的成员函数。...动态类型是在程序运行时才能确定的类型,典型例子就是类对象指针指向子类对象,这时,指针的动态类型就变成了子类指针。...正如上述C++标准中所举的例子,假设p原本是一个B类型指针,如果现在让p指向D对象,而D恰好是B的派生类,那么p的动态类型就是D类型指针。...pa的静态类型是A类型指针,而它的的动态类型却是B类型指针。 一旦明白了静态类型和动态类型的概念,静态绑定和动态绑定也就好理解了。...我来翻译一下吧:“调用虚函数时使用的缺省参数在虚函数声明中给出,这些缺省参数由指示对象的指针或引用的静态类型确定。派生类中的重写函数无法获得它所重写的函数的缺省参数。”

1.3K60

【C++修炼之路】16.C++多态

sd; //普通调用:跟调用对象类型有关 //多态调用:指针/引用 -- 跟指向的对象有关 Func(pn); Func(st); Func(sd); return 0; } 这就是多态的调用...多态调用:指针/引用 – 跟指针无关,跟指向的对象有关 而此时delete(ptr)就是普通的调用,是什么类型就调用什么类型的析构函数,但显然发现,ptr2的_s没有析构,因此问题出现在了这里,这个时候...&b; ptr->Func1(); ptr = &d; ptr->Func1(); return 0; } 可见编译时绑定就是什么类型指针调用什么不能在更改,运行时绑定就是指向的是什么类型就调用什么可以随时变化...静态绑定又称为前期绑定(早绑定),在程序编译期间确定了程序的行为,也称为静态多态,比如:函数重载 动态绑定又称后期绑定(晚绑定),是在程序运行期间,根据具体拿到的类型确定程序的具体行为,调用具体的函数...动态多态通过虚函数的重写之后,指针/引用指向或者引用类,则调用类,指向或者引用子类,则调用子类,本质是虚表动态绑定

47200

java 实现多态_Java多态的实现原理

0.前言 多态在Java技术里有很重要的地位,在面试中也会经常被问到。 多态使用大家应该都比较了解,但是多态的实现原理就有点抽象了,查了很多很多资料,连续几天断断续续的看,有时候看着看着就走神了。...调用方法时通过传递的参数类型来决定具体使用哪个方法,这就是多态性。...Java的方法重写,是类与子类之间的多态性,子类可继承类中的方法,但有时子类并不想原封不动地继承类的方法,而是想作一定的修改,这就需要采用方法的重写。重写的参数列表和返回类型均不可修改。...为了优化对象调用方法的速度,方法区的类型信息会增加一个指针,该指针指向记录该类方法的方法表,方法表中的每一个项都是对应方法的指针。...(3)根据this指针得到具体的对象(即 girl 所指向的位于堆中的对象)。

97030

【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 指针 指向 子类对象 | 使用 子类对象 为 类对象 进行初始化 )

" 应用场景 : 直接使用 : 使用 子类对象 作为 类对象 使用 ; 赋值 : 将 子类对象 赋值给 类对象 ; 初始化 : 使用 子类对象 为 类对象 初始化 ; 指针 : 指针 指向...指向 子类对象 定义 一个子类对象 Child child ; 定义父类的指针 , 将 指针 指向 子类对象 的地址 , 这是合法的 ; 代码示例 : // 类对象 Parent parent...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; 该原则的应用场景如下 : 定义函数 , 接收 指针...// 通过指针调用类函数 p_parent->funParent(); // 将指向子类对象的指针传给接收指针的函数 // 也是可以的 fun_pointer...类型兼容性原则 : 指针 指向 子类对象 Parent* p_parent2 = NULL; p_parent2 = &child; // 通过指针调用类函数

23120

java 多态

1.概述 1.多态概述 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法...3.多态的转型 多态的转型分为向上转型和向下转型两种: 向上转型:多态本身就是向上转型过的过程 使用格式:类型 变量名=new 子类类型(); 适用场景:当不需要面对子类类型时...,通过提高扩展性,或者使用类的功能就能完成相应的操作。...向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将类引用类型转为子类引用各类型 使用格式:子类类型 变量名=(子类类型类型的变量; 适用场景:当要使用子类特有功能时...,类型指针,那么对象体中存放的是对象的成员变量,成员变量包括从父类继承过的成员变量和本类的成员变量,那么如果类和子类有重名的变量,那么这个时候就要看对象的静态类型是什么了,静态类型就是声明类型,如果声明类型类那么就直接选取类的成员变量

46910

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

继承中要构成多态还有两个条件: 必须通过基类的指针或者引用调用虚函数 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写 如果是通过基类的指针调用虚函数,要如下图所示使用: 虚函数 虚函数...虽然Car不能实例化对象,但是可以用它的指针指向子类,然后调用。 接口继承和实现继承 普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,继承的是函数的实 现。...(下方过程只做了解) 如上图,确实是被隐藏了。 虚表是一个存VFPTR类型(虚函数指针类型)的数组。...答:不能,因为静态成员函数没有this指针使用类型::成员函数 的调用方式无法访问虚函数表,所以静态成员函数无法放进虚函数表。 构造函数可以是虚函数吗?...因为此时是用类对象调用。 结论:使用类对象调用的方法永远是类的方法 2.

9610

继承和多态(2)(多态部分)

了解动态绑定的前提  要想实现动态绑定,我们需要满足以上几个条件: 1.要发生向上转型 2.有发生重写(子类和类有同名的方法) 3.使用类对象的引用去调用重写方法 完成了这三部分,就会发生动态绑定。...override):也称为覆盖  重写是对(重写的类方法是有限制的,等会来讲)类方法的实现过程进行重新编写放在子类中。 ...在实现重写和向上转型这两个前提后,用该类对象的引用调用子类和类都存在且同名的方法时就发生了动态绑定使运行时期确认调用的是子类同名方法,而不是正常情况下应该调用的类同名方法。...可扩展能力更强 如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低....当右边为接口类型时,左边引用变量所指向的实例对象的类型如果实施了右边的接口类型,则返回true,不是则返回false。 注意如果左边引用变量发生了向上转型,则指向的实例对象的类型是其子类的类型

9310
领券