纯虚函数用于当算法的行为没有为集合明确定义,但算法的存在为集合明确定义时。
我希望这不是太多消化,但也许功能分析的教训是相关的。我离题了关于虚函数的集合理论含义。
设集合A的族具有性质 {x : P(x)}
设 A 是族A
的一个元素
设 A' 也是族A的一个元素
A 和 A' 可能属于以下三个类别之一。
(1) A 和 A' 等价
对于 A 的所有 a 元素,a 是 A' 的元素
AND 对于 ~A 的所有 b 元素,b 是 ~A' 的元素
(2) A 和 A' 相交
存在 A 的一个元素,其中 a 是 A' 的一个元素
也存在 A 的 b 个元素,其中 b 是 ~A' 的一个元素
(3) A 和 A' 不相交
不存在 A 的元素 a 也是 A' 的元素
WHERE ~X 指代所有不是集合 X 的元素的 x
在情况 (1) 中,如果 U 是A族的一个元素,我们将定义一个非抽象行为,这意味着存在单个值 u,使得对于作为A族元素的所有 U,u = P(U)
在情况 (2) 中,如果 U 是A族的一个元素,我们将定义一个虚拟行为,这意味着存在单个值 u,使得 u = P(U'),其中 U' 是 U 的子集。
在情况 (3) 中,我们将定义一个纯虚行为,因为 A 和 A' 的相似之处仅在于它们都是 A 族的成员,因此A 和 A' 的交集是空集,这意味着确实存在不存在 A 和 A' 的任何共同元素
考虑一下语法在逻辑定义方面的含义,您将能够回答以下问题:
(1) 函数需要抽象吗?(情况 1 否,情况 2 和 3 是) (2) 函数需要纯虚函数吗?(案例 1 和 2 否,案例 3 是)
在情况 2 中,它还取决于行为的必要信息保存在哪里——在基类中还是在派生类中。
您无法从 DISPLAY 渲染 SHAPE,除非 DISPLAY 查找不一定属于 SHAPE 定义的信息。因为 DISPLAY 无法查看从 SHAPE 派生的类型的定义,超出了为 SHAPE 定义的定义。因此,必须为派生类中的抽象函数定义任何依赖于派生类型中包含的信息的功能。