N
netbug
Unregistered / Unconfirmed
GUEST, unregistred user!
我们知道:在C++中,允许函数重载,即编译器会根据参数的不同,<br>自动调用同名的重载函数.<br>而在继承与派生中,子类对父类的成员函<br>数进行改造的方法有两种:重载与覆盖.其中重载也就是<br>子类对父类的同名的成员函数进行改造,使子类与父类的同名的<br>成员函数具有不同的形参,即形成重载.<br>请看:<br>#include<iostream.h><br>class A<br>{<br>public:<br>void f();<br>};<br>class B<br>{<br>public:<br>void f(int x);<br>};<br>void A::f()<br>{<br>cout<<"space"<<endl;<br>}<br>void B::f(int x)<br>{<br>cout<<"x="<<x<<endl;<br>}<br>void main()<br>{<br>A a1;<br>B b1;<br>a1.f();<br>b1.f(7);<br>b1.f();<br>}<br>此程序不能编译通过,系统提示b1.f()出错,我把它改成b1.A::f()就能通过.<br>我想问:<br>1.既然允许子类对父类的成员函数进行重载,那为何B类的对象b1不会<br>根据形参的不同,自动调用A类中的同名函数?(A类与B类中的同名函数f的<br>参数的不同)<br>2.如果一定要加类名限定写成b1.A::f(),那与函数覆盖有何不同?<br>3.请问在继承与派生中,如何判断函数重载与函数覆盖?<br>能否举例说明?<br>谢谢.