什么是虚拟继承?(virtual inheritance?)

虚拟继承是一种继承类型,其中超类的实现是不完整的,并且需要一个子类来完成对象的定义。这种类型的继承可以与单一继承和多重继承结合使用,但最常用于多重继承。从虚拟基类继承的任何类都将成为该基类的直接子类。虚拟基类可能依赖子类来实现其所有方法,但这不是必需的。...

虚拟继承是一种继承类型,其中超类的实现是不完整的,并且需要一个子类来完成对象的定义。这种类型的继承可以与单一继承和多重继承结合使用,但最常用于多重继承。从虚拟基类继承的任何类都将成为该基类的直接子类。虚拟基类可能依赖子类来实现其所有方法,但这不是必需的。

C++ is the most commonly known computer language to use virtual inheritance.

C++是使用虚拟继承最常用的计算机语言。若要在C++中声明虚拟继承,则使用“虚拟”关键字。超类和子类都必须用“virtual”关键字声明虚拟方法。这告诉C++编译器超类是不完整的,它必须从子类中获取信息来完成它。使用子类完成超类并不意味着子类如果它们具有相同的基类,则彼此重写,而是C++编译器负责确定每个对象的碎片。

由于虚拟继承需要虚拟基类,所以C++中的全局函数不能声明为虚拟的。这种继承类型只能在遵循面向对象编程(OOP)原则时使用。这样做的原因是全局函数与特定的类没有关联,因此通常是独立的。没有超类和子类继承是不可能发生的,因此全局函数和虚拟继承是互斥的。理论上,全局函数可以在虚函数中使用,但反过来可能并不总是有效。

虚拟继承用于解决许多编程问题,其中最有用的是解决歧义。在多重继承中,可以有一个基类a,它有两个子类B和C,然后是一个从类B和C继承的类D。这种模式通常被称为“死亡钻石”,因为如果类A、B和C都有相同方法的实现,那么类D就不可能确定应该使用哪个实现。虚拟继承解决了这个问题,因为每个类的实现都是不同的,因此是明确的。这种区别由称为虚拟表(vtables)的专门内部对象处理,这些对象跟踪每种对象类型,但这些表不需要程序员显式操作,因为它们内置于语言中。

  • 发表于 2021-12-15 14:02
  • 阅读 ( 180 )
  • 分类:互联网

你可能感兴趣的文章

身体的(physical)和虚拟内存(virtual memory)的区别

...当执行这些程序时,它们被称为进程。 什么是虚拟内存(virtual memory)? Virtual memory is a logical memory. In other words, it is a memory management technique performed by the operating system. Virtual memory allows the programmer to use more memory for the programs than the av...

  • 发布于 2021-07-01 06:29
  • 阅读 ( 798 )

虚函数(virtual function)和纯虚函数(pure virtual function)的区别

虚函数和纯虚函数的主要区别在于虚函数是基类中使用Virtual关键字声明的函数,而纯虚函数是基类中没有函数定义的虚函数。 多态性是面向对象的一个重要概念。它允许一个对象有多种形式。有两种类型的多态性称为早期结合...

  • 发布于 2021-07-01 14:13
  • 阅读 ( 487 )

云(cloud)和虚拟化(virtualization)的区别

...的可维护性。此外,云有能力减少开支。 什么是虚拟化(virtualization)? 虚拟化是指创建服务器、桌面、操作系统、存储设备或网络资源的虚拟版本。它还允许在多个客户和组织之间共享资源或应用程序的单个物理实例。创建虚拟...

  • 发布于 2021-07-01 17:17
  • 阅读 ( 362 )

继承(inheritance)和作文(composition)的区别

...、类、组合、继承、方法、对象、面向对象 什么是继承(inheritance)? 继承是指在新类中使用已经存在的类的属性和方法。我们称这个已经存在的类为父类、超类或基类。新类称为子类、子类或派生类。开发人员不必因为继承而...

  • 发布于 2021-07-01 18:11
  • 阅读 ( 547 )

全虚拟化(full virtualization)和云中的准虚拟化(paravirtualization in cloud)的区别

...程序、准虚拟化、虚拟化 什么是云中的完全虚拟化(full virtualization in cloud)? 主机操作系统直接在硬件上运行,而来宾操作系统在虚拟机上运行。在完全虚拟化中,来宾操作系统不关心是否存在hypervisor。因此,每个虚拟机及其...

  • 发布于 2021-07-01 18:25
  • 阅读 ( 693 )

单一的(single)和多重继承(multiple inheritance)的区别

...,多重继承,对象,单一继承, 什么是单一继承(single inheritance)? 在继承中,现有的类称为父类、超类或基类。新类称为子类、子类或派生类。通过继承,子类可以使用超类的属性和方法。因此,程序员不必从一开始就实现整...

  • 发布于 2021-07-01 18:31
  • 阅读 ( 254 )

继承(inheritance)和集装箱船(containership)的区别

...、类、容器、组合、继承、对象、面向对象 什么是继承(inheritance)? 继承是在新类中使用已有类的属性和方法的方法。已经存在的类是父类、超类或基类。我们称这个新类为子类、派生类或子类。此外,通过使用继承,程序员...

  • 发布于 2021-07-02 02:07
  • 阅读 ( 184 )

继承(inheritance)和多态性(polymorphism)的区别

继承和多态性的区别在于,计算机科学中的继承是从现有函数创建一个新类,而多态性是多种形式的公共接口。 如果你想学习编码和编程,你必须学习计算机科学中的继承和多态性的概念。你可以通过继承的方法再次使用一个...

  • 发布于 2021-07-08 11:10
  • 阅读 ( 502 )

事实上的(virtual)和抽象方法(abstract method)的区别

...ine(“重写ExampleAstractClass类的ExampleAstractMethod”); } } Virtual也是与修改方法、属性、索引器或事件声明相关联的关键字。使用此关键字可以修改派生类中声明的实体。在本例中,派生类重写了基类中声明的虚方法。 阶级基础 ...

  • 发布于 2021-07-13 21:02
  • 阅读 ( 174 )

什么是不同类型的虚拟化产品?(the different types of virtualization products?)

...icrosoft®和VMware®。Microsoft®最受欢迎的产品之一是Microsoft Virtual Server®,它是一种独立的虚拟机监视器(VMM),有助于在Windows XP®、Windows Vista®和Windows Server®操作系统上创建虚拟机。VMWare服务器™ 只是VMWare®广泛的虚拟化产品组...

  • 发布于 2021-12-09 09:50
  • 阅读 ( 164 )
pdnxjq36532
pdnxjq36532

0 篇文章