T230531 C++ Polymorphism
有一段时间没写 TGS 了,继续更新。 今天谈一个基本概念—— Polymorphism,这是大多数初学者最初接触的概念,要说它简单,那你可能想简单了。它是一个可以串起 C++98-26 发展历程的一个概念,像之前的五星「重载决议」内容,都仅仅只是这条逻辑链下的某一个小支点,它至少链接了 50+ 条概念,非常复杂。 Polymorphism 最基本的目标就是,同一功能,多种实现。 首先引出的就是 Type System,因为功能需要针对不同的类型,来定制多种实现。类型一致性必须定义明确,才能在此基础上构建功能,主要存在两种定义,一种是 Nominal,一种是 Structural。 Nominal 又叫 name-based type system,这种方式以名称来定义类型一致性,打个比方,夏侯婴、夏侯惇、夏侯渊在这种类型系统中就被认为是同一种类型,具有类型一致性,那么同一种功能就可以作用到所有这种类型上去。Structural 又叫 property-based type system,这种方式以属性来定义类型一致性,某些人都说粤语,这是一个共同属性,那么就被视为是同一种类型,只要附带这个属性,就具备调用功能的条件。 采用 Nominal 的主要是 Subtype Polymorphism 和 Ad hoc Polymorphism,而采用 Structural的方式的主要是 Parametric Polymorphism。 Subtype Polymorphism 是 Object-oriented programming 中才有的,C++ 通过Inheritance+virtual functions来支持这种方式,根据同一继承体系的名称来定义类型一致性,只要在高层级名称中提供默认行为,其他低层级名称就可以使用这种默认行为,也可以重新改写行为,由此支持同一功能,多种实现这一目标。它的问题在于,一些第三方库可能无法派生,或是有些类型不满足is-a关系,强制其进入同一 type system,是一种侵入式的行为。 因此 C++ 产生了一种技术来解决这种缺点,就是… Continue Reading T230531 C++ Polymorphism