我有以下片段:
#include <iostream>
using namespace std;
class IA
{
public:
virtual void printA() = 0;
virtual ~IA(){};
};
class IB
{
public:
virtual void printB() = 0;
virtual ~IB(){}
};
class IC : public IA, public IB
{
public:
void printA() {cout << "hello world a" << endl; }
void printB() {cout << "hello world b" << endl; }
};
void func(IB* p)
{
p->printB();
}
int main()
{
IA* p = new IC;
p->printA();
cout << "cast to ib" << endl;
func((IB*)p);
return 0;
}
执行代码后,我得到以下结果:
hello world a
cast to ib
hello world a
我的问题是,编译器对(IB*)p
那个原因func
调用做了什么,p->printB()
但得到的是结果hello a
而不是hello b
?
演员幕后是什么??什么编译器生成用于转换?如果我更改为func(dynamic_cast<IB*>(p))
,则得到print b
正确的结果。