动态联编有关问题分许

动态联编问题分许
所有的函数都是虚函数
下面两种写法调用的结果不同   高手来分析分析

A*   pa=(A*)new   B();
  pa-> Foo();                 //调用子类   但参数是父类默认参数
  pa-> f(2.0);                

  B*   pb=new   B();
  A*   pa2=pb;  
  pb-> Foo();                     //调用子类方法   但入参是子类的默认参数
  pb-> f(2.0)

------解决方案--------------------
······
楼主再回顾一下 多态的特性 ~
------解决方案--------------------
默认参数没有多态性。
另外,从设计上霁,子类应该尊重父类接口,不要乱改虚函数的默认参数。
------解决方案--------------------
默认参数的值是依赖于指针静态类型的,也就是出于效率考虑,默认参数没有多态特性
A* pa=(A*)new B(); // 所有以pa-> 形式调用的函数,默认参数都是class A里面的
B* pb=new B(); // 所有以pb-> 形式调用的函数,默认参数都是class B里面的

< <Effective C++> > 和 < <More Effective C++> > 是不错的书