Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过引用调用虚函数:派生类';覆盖被调用_C++_Polymorphism_Dynamic Binding - Fatal编程技术网

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