没有指针/引用的多态性:不可能
在面向对象编程中,多态性使得不同类的对象对相同的对象有不同的响应方法调用。虽然 StackOverflow 上的一些问题涉及为什么指针/引用对于多态性至关重要,但它们通常会深入研究特定场景。本文旨在阐明实现多态性时需要指针/引用背后的根本原因。
通常认为堆上的内存分配应该足以满足动态绑定(促进多态性的机制)。然而,这个假设是不正确的,如以下代码所示:
Derived d; Base* b = &d;
这里,d 是在堆栈上分配的,但多态性通过基类指针 b 有效地工作。
理解多态性的语义至关重要。缺少基类指针或对派生类的引用会导致多态性无效。考虑以下情况:
Base c = Derived();
在这种情况下,对象 c 不会被视为 Derived,而是由于切片而被视为 Base。虽然多态性在技术上是适用的,但由于原始的 Derived 对象不再存在,它变得毫无用处。
或者,下面的代码强调了指针的重要性:
Base* c = new Derived();
指针 c 指向内存位置,无论它引用的是 Base 还是 Derived 对象。然而,通过c调用虚方法会触发动态解析,从而确保多态行为。
总而言之,指针/引用不仅仅是实现多态性的便利。它们是维护派生类的标识并确保虚拟方法调用解析为适当的实现的内在要求。没有指针/引用,多态性在面向对象编程中就成为一个不可能的概念。
以上是为什么指针/引用对于面向对象编程中的多态性至关重要?的详细内容。更多信息请关注PHP中文网其他相关文章!