虚拟类是一个只在内存中分配一次的类,这样该类的子类只使用在内存中建立的父类的一个副本。类是一组共享公共特性或属性的对象。使类虚拟化使面向对象的编程语言能够使用多个继承当第二代或更多代父类从公共祖先基类派...
虚拟类是一个只在内存中分配一次的类,这样该类的子类只使用在内存中建立的父类的一个副本。类是一组共享公共特性或属性的对象。使类虚拟化使面向对象的编程语言能够使用多个继承当第二代或更多代父类从公共祖先基类派生时。根据引用的计算机编程语言,“虚”关键字、类似关键字,或者,一个类的语法和语义被用来暗示一个特定的类被认为是虚拟的。使一个类成为虚拟的可以使面向对象的编程语言在第二代或更多代父类来自共同的祖先基类时使用多重继承。不是所有面向对象的编程语言允许多重继承,即子类可以同时从多个父类派生,一个类可以同时从两个父类继承所有的成员数据和成员函数,并且可以访问这两组父数据和函数,其他支持多重继承的语言包括Perl、Python、Tcl,当用于创建子类的两个或多个父类最初只从一个或同一个祖父母类派生时,多重继承层次结构中会出现一个问题。这称为diamond问题,源于这种情况下层次结构的外观的名称。当编译器程序试图实例化一个类,例如由两个具有公共祖父母的父类构成的孙类,则在内存中生成两个祖父母的副本,每个父类一个由于内存中同一祖父母的多个副本造成的歧义,编译器无法确定孙辈应该使用哪个祖父母副本来访问祖父母数据或函数。要纠正这种情况,在C语言中,当声明父类时,祖父母会变成一个虚拟类。这会导致编译器在内存中只生成一个祖父母共享的副本。一旦祖父母成为一个虚拟类,编译器就可以决定孙子应该如何访问祖父母,因为只有一个副本在构建类层次结构时,尤其是当它们将被包含在将来更大层次结构中或成为更大层次结构的基础时,应格外小心。正确使用虚拟类可以给类层次结构更大的发展自由度;但是,研究坚实的计算机程序设计工程原理将有助于确保不发生因程序组织不当而产生的意外副作用
-
发表于 2020-08-06 09:13
- 阅读 ( 2389 )
- 分类:电脑网络