关于C++类的引用的问题

我做了一道C++的题,代码如下。请问各位大神,为什么第二个输出是D而不是B?原因尽量详细一些,谢谢。

#include <iostream>
using namespace std;
class B
{
public:
    virtual void show() { cout << "B"; }
};
class D :public B
{
public:
    void show() { cout << "D"; }
    void fun1(B* ptr) { ptr->show(); }
    void fun2(B& ref) { ref.show(); }
    void fun3(B b) { b.show(); }
};
int main()
{
    B* p = new D;
    D d;
    d.fun1(p);
    d.fun2(d);
    d.fun3(d);
    cout << endl;
    system("pause");
    return 0;
}

图片说明

c++

3个回答

因为show是虚函数,使用指针和引用访问的时候,访问的是它实际类型重写的版本

引用本质上就是指针,只是写法用法上搞点区别而已

show引用是指针类型引用,他指向的是原本的地址

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问