虚拟继承是一种继承类型,其中父类的实现是不完整的,并且需要子类才能完整地定义对象。这种类型的继承可以与单继承和多重继承结合使用,但最常用于多重继承。任何从虚拟基类成为该基类的直接子类。虚拟基类可能依赖于子类...
虚拟继承是一种继承类型,其中父类的实现是不完整的,并且需要子类才能完整地定义对象。这种类型的继承可以与单继承和多重继承结合使用,但最常用于多重继承。任何从虚拟基类成为该基类的直接子类。虚拟基类可能依赖于子类来实现其所有方法,但这不是一个要求。C是最常用的使用虚拟继承的计算机语言。C是最常用的使用虚拟继承的计算机语言。要在C中声明虚拟继承,使用“virtual”关键字。父类和子类都必须用“virtual”关键字声明虚方法这告诉C编译器超类是不完整的,它必须从子类中获取信息才能完成它。使用子类来完成超类并不意味着子类如果有相同的基类,它们会相互覆盖,而是由C编译器来决定每个对象的哪些部分虚拟继承需要虚拟基类,C中的全局函数不能声明为虚。只有在遵循面向对象编程(OOP)原则的情况下才能使用此继承类型。原因是全局函数与特定的类没有关联,所以通常是独立的,没有超类和子类的继承是不可能发生的,所以全局函数和虚继承是互斥的,全局函数理论上可以在虚函数内部使用,但反过来可能并不总是有效的,虚拟继承被用来解决许多编程问题,其中最有用的是解决歧义在多重继承中,可以有一个基类a,它有两个子类B和C,然后是一个从类B和C继承的类D。这种模式通常被称为“死亡钻石”,因为如果类a、B和C都有相同方法的实现,类D不可能确定它应该使用哪个实现。虚拟继承解决了这个问题,因为每个类的实现都是不同的,因此没有歧义。这种区别是由名为虚拟表(vtables)的专用内部对象处理的,这些对象跟踪每种对象类型,但这些表不需要由程序员显式地操作,因为它们是内置于语言中的
-
发表于 2020-08-06 15:03
- 阅读 ( 1058 )
- 分类:电脑网络