C++ 通过引用调用虚函数:派生类';覆盖被调用
我有以下代码:C++ 通过引用调用虚函数:派生类';覆盖被调用,c++,polymorphism,dynamic-binding,C++,Polymorphism,Dynamic Binding,我有以下代码: #include <iostream> using namespace std; class Parent { public: virtual void f() { cout << "Parent" << endl; } }; class Child : public Parent { public: void f() { cout << "Child" << endl; } }; void t1(
#include <iostream>
using namespace std;
class Parent {
public:
virtual void f() { cout << "Parent" << endl; }
};
class Child : public Parent {
public:
void f() { cout << "Child" << endl; }
};
void t1(Parent * p) { p->f(); }
void t2(Parent & p) { p.f(); }
int main() {
Child a;
t1(&a);
t2(a);
return 0;
}
我可以理解
t1
调用Child::f()
是动态绑定的结果,但第二个问题让我感到困惑-我希望父项&
能够“修复”类型,因此t2
将调用父项::f()
。我误解规则了吗?如何解释这种行为?多态性就是这样做的。
我希望
Parent&
能够“修复”类型,因此t2
将调用Parent::f()
你想错了
我误解规则了吗
对
人们如何解释这种行为
通过C++获取一本书,阅读多态性章节。 您的
父级&
与父级*
的工作原理相同:允许虚拟分派
需要注意的重要一点是,指针(和引用)不会调用多态性。所以无论你读到哪里,只有指针调用多态性都是错误的多态性由对象访问调用。由于、
我期望父级&来“修复”类型
这个期望值基于什么?你能指出一段误导你的文档吗?我知道它适用于指针;那么引用也遵循同样的规则?是的。虽然看起来你并不完全理解这些规则;我们能帮你吗?@martin_ljchan和他跳过晚上的聚会,然后在第二天早上参加重要的讲座,下次!关于虚拟分派,我一定是不知何故错过了指针和引用的虚拟分派工作部分。谢谢大家的帮助;额外的阅读也很感激:)
Child
Child