image.png

    1. void Call(B &p)
    2. {
    3. p.Fun();
    4. p.Do();
    5. }
    • 嵌套的多态问题跟普通的一样,只是分析的时候要连带把一个派生类类的所有父辈都要考虑在内
    • 通过第一行输出,观察 B 中只有 Do() ,而没有声明 Fun()并且 C 中的 Fun() 并不是虚函数,可以断定,这个 p 的参数类型应该是 A 或者 B
    • 通过第二行输出,像调用 CDo()A 中没有声明 Do() 为虚函数,而恰好 B 中有该声明,所以最后参数类型是 B &