分享一道类继承的笔试题目

来源:互联网 发布:福尔摩斯探案集 知乎 编辑:程序博客网 时间:2024/06/13 05:48

转自:http://blog.csdn.net/liuzhanchen1987/article/details/8074714


[cpp] view plaincopy
  1. <pre class="cpp" name="code">#include<iostream>  
  2. using namespace std;  
  3. class A  
  4. {  
  5. public:  
  6.     virtual void fun1()  
  7.     {  
  8.         cout<<"A fun1"<<endl;  
  9.     }  
  10.     void fun2()  
  11.     {  
  12.         cout<<"A fun2"<<endl;  
  13.     }  
  14. };  
  15. class B :public A  
  16. {  
  17. public:  
  18.     void fun1()  
  19.     {  
  20.         cout<<"B fun1"<<endl;  
  21.     }  
  22.     void fun2()  
  23.     {  
  24.         cout<<"B fun2"<<endl;  
  25.     }  
  26. };  
  27. int main()  
  28. {  
  29.     B *obB=new B;  
  30.     A *obA=(A*)obB;  
  31.     obA->fun1();  
  32.     obA->fun2();  
  33.     cout<<endl;  
  34.     obA = (B*)obA;  
  35.     obA->fun1();  
  36.     obA->fun2();cout<<endl;  
  37.     A *a1=new A;  
  38.     B *b1=(B*)a1;  
  39.     a1->fun1();  
  40.     a1->fun2();cout<<endl;  
  41.     a1=(A*)a1;  
  42.     a1->fun1();  
  43.     a1->fun2();  
  44.     cout<<endl;  
  45.     B b2;  
  46.     A a2=b2;//对象类型进行了转换  
  47.     a2.fun1();  
  48.     a2.fun2();cout<<endl;  
  49.     A a3;  
  50. //  B b3=(B)a3; 不可以转换  
  51.     return 0;  
  52.   
  53. }</pre><br>  
  54. <pre><pre class="cpp" name="code">对于多态,调用子类的函数还是父类的函数是由其对象决定的,不是由指针决定的,  
  55. 输出结果是:</pre><pre class="cpp" name="code">B fun1  
  56. A fun2</pre><pre class="cpp" name="code">父类指针指向子类,如果父类函数为虚函数则调用子函数,否则调用父类中函数。 B fun1  
  57. A fun2</pre><pre class="cpp" name="code">将原先指向子类的父类再转换成子类,不太清楚为什么是以上输出,欢迎大牛指点派生类指针指向基类,调用的函数全是基类的,因为该对象没有被转换成派生类对象A fun1  
  58. A fun2</pre><pre class="cpp" name="code">A fun1  
  59. A fun2</pre><pre class="cpp" name="code">派生类完全转换成基类对象</pre><pre class="cpp" name="code">A fun1</pre><pre class="cpp" name="code">A fun2</pre><br></pre>  
  60. <pre></pre>