我做了一道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;
}
因为show是虚函数,使用指针和引用访问的时候,访问的是它实际类型重写的版本
引用本质上就是指针,只是写法用法上搞点区别而已
show引用是指针类型引用,他指向的是原本的地址