c++中具有继承关系的隐式转换问题

起因是群里有人问:

 

 

 2,3,4是为什么。

解答:

2:2是因为B中的show(A)才是多态,A a2=new B(),此时a2只有show(A)的多态,而面对的类型切割问题,在编译的时候派生类会将基类的多态的函数隐藏掉,所以指向的肯定是派生类的函数

3:首先它先不隐式转换去A和B的重载里面寻找,优先级B>A。但是在B里面找不到,所以匹配到A里面,因为不隐式转换比隐式转换的优先级高

4:4的时候B中的show(B)和show(A)都可以,但是B离D更近

我查了好多资料,终于搞懂了,其实很简单,刚开始大意了,没有闪

 对了,因为JAVA是拿CPP写到,它的多态和CPP差不多

 

posted @ 2023-02-24 13:01  heisse  阅读(23)  评论(0编辑  收藏  举报