将基类指针强制转换为子类指针后的疑惑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将基类指针强制转换为子类指针后的疑惑相关的知识,希望对你有一定的参考价值。
#include <iostream>
using namespace std;
class A
public:
virtual void fun0()
cout << "A::fun0 (virtual)" << endl;
void fun1()
cout << "A::fun1" << endl;
void fun2()
cout << "A::fun2" << endl;
;
class B : public A
public:
void fun0()
cout << "B::fun0 (virtual)" << endl;
void fun1()
cout << "B::fun1" << endl;
void fun3()
cout << "B::fun3" << endl;
;
int main()
A *pa=new A;
B *pb=(B*)pa; //想请教一下这一步,编译器具体做了些什么工作??
pb->fun0();
pb->fun1();
pb->fun2();
pb->fun3();
return 0;
以下是打印结果
A::fun0 (virtual)
B::fun1
A::fun2
B::fun3
问题是:经过强制转换后,pb调用的虚拟函数表应该是类A的,但调用函数的话则是可以调用类B的,不知道如何解释这种现象?
以上是关于将基类指针强制转换为子类指针后的疑惑的主要内容,如果未能解决你的问题,请参考以下文章