C++中关于虚函数的问题
我在写项目的时候发现一个问题:
HIMCC是基类,有一个MCC_PMAC类是其子类,我自己写了个类MCC_MS类继承MCC_PMAC类,在MCC_MS中覆盖了MCC_PMAC的部分函数,并且是virtual的,问题是这样的我在某个地方
HIMCC* createMCC(){MCC_MS *pThis = new MCC_MS();return pThis;}
HIMCC* myMCC = CreateMCC();
当我用myMCC->调用HIMCC中的函数时,是虚函数,如果是MCC_MS中也有的,则会调用到MCC_MS中,但是MCC—MS中没有的话,就会调用到MCC_PMAC中,我不明白的是为何会调用到MCC_PMAC中。(注:MCC_MS中的虚函数都是覆盖MCC_PMAC的,) 继承 C++ 类
[解决办法]
子类没有覆盖的就会调用父类的.
难道你期待一个编译期的错误? 编译期没法检查.
在创建 MCC_MS 的虚函数表时, 如果 MCC_MS 没有对应的函数, 就会填 MCC_PMAC 对应函数的指针.
[解决办法]
那么MCC_MS首先就继承了MCC_PMAC的一切实现,包括虚函数。
这部分被你写的函数所替换,但没有覆盖的那部分依然是从MCC_PMAC继承来的。
这自然就很正常了,一部分被你替换了,所以“调用到MCC_MS”;另一部分从MCC_PMAC继承,所以“调用到MCC_PMAC中”。