一、前言
在日常工作中踩了一个坑,现象是:从一个dll里获取导出类A,然后调用类A的FunA,结果FunA没有被调用,相关代码简化如下:
class AImpl : public OtherClass, public A
{
// OhterClass 不包含类A的FunA
...
// 用户通过该函数获取A的指针,结果用A的指针调用FunA失败
void Query(void ** ptr)
{
*ptr = this;
}
}
最后定位到的原因是:多重继承下,直接赋值指针是没有进行类型转换的,其仅仅只是单纯赋值,这导致this指针没有类型转换为A类,所以A类的FunA不会被调用
踩到这个坑说明我对C++的多重继承下的类型转换完全不了解,所以就搞个文章梳理下~
二、情景模拟复现
原工程项目比较庞大,不利于学习研究,所以把它抽成下面这个demo:
class ChildA
{
public:
ChildA(){
}
virtual ~ChildA(){
}
virtual void FunA() = 0;
virtual void Fun() {
printf("childa fun\n");}
};
class ChildB
{
public:
ChildB(){
}
virtual