Skip to content

关于本章

本章讨论C++的subtyping polymorphism,这是一种runtime polymorphism,是C++的核心特性之一。

Reference semantic and runtime polymorphism

在C++中,runtime polymorphism与value semantic、reference semantic密切相关。触发我对它们产生思考的是:

1、如何评价 C++11 的右值引用(Rvalue reference)特性? - zihuatanejo的回答 - 知乎中提及的:值语义和运行时多态是矛盾的。

2、multiple dispatch

C++的value semantic是不支持runtime polymorphsim的,reference semantic是支持runtime polymorphsim的,所以需要通过reference semantic才能够实现runtime polymorphysim的,classic example包括:

1、stackoverflow What is object slicing? # A

这篇文章收录在Object-slicing章节中,它非常好的展示了value semantic、reference semantic、runtime polymorphism之间的关联

Implementation

需要思考:reference semantic是如何实现polymorphism的,这在C++\Language-reference\Classes\Subtype-polymorphism\Implementation章节进行了描述。

Virtual in C++

Virtual method and virtual data

在C++,dynamic polymorphism是behavior(function),只有virtual method(virtual table),而不是data/value的。

NOTE: 这是符合Uniform function model的,参见C++\Language-reference\Basic-concept\index.md的“Uniform function model”章节,它所对应的是**Member method is a kind of function**。

那C++中能否实现virtual data呢?参见下面的"Virtual data"章节。

Virtual method

章节 说明
Virtual Constructor C++\Idiom\OOP\Virtual-Constructor
Virtual destructor C++\Language-reference\Classes\Special-member-functions\Destructor\Virtual-destructor
Virtual Friend-Function C++\Idiom\OOP\Virtual-Friend-Function
Virtual function C++\Language-reference\Classes\Subtype-polymorphism\Inheritance\Virtual-function
Virtual assignment operator Object-slicing

Virtual data

在What is “virtual data,” and how-can / why-would I use it in C++? Δ中讨论了,这个讨论收录在了C++\Language-reference\Basic-concept\Reference-and-Value-Semantics\Value-and-reference-semantics中。

Virtual return type

Covariant,参见 Return-Covariant-Types 章节。

Virtual inheritance

这在C++\Language-reference\Classes\Subtype-polymorphism\Inheritance\Derived-classes\Virtual-inheritance中进行了讨论。