动态联编有关问题分许
动态联编问题分许
所有的函数都是虚函数
下面两种写法调用的结果不同 高手来分析分析
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++> > 是不错的书
所有的函数都是虚函数
下面两种写法调用的结果不同 高手来分析分析
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++> > 是不错的书