日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
實例演示C++多態(tài)的實現(xiàn)過程

多態(tài)描述的是使用基類的指針或引用操作多個類型的能力。

創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網站策劃、網站設計、成都做網站、網站設計、電子商務、網站推廣、網站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網的全面整合營銷服務。公司擁有豐富的網站建設和互聯(lián)網應用系統(tǒng)開發(fā)管理經驗、成熟的應用系統(tǒng)解決方案、優(yōu)秀的網站開發(fā)工程師團隊及專業(yè)的網站設計師團隊。

我們知道,子類的指針是可以隱式轉化為父類的,所以我們在進行程序設計的時候如果要對一個未知的類型進行處理,可以在方法聲明時把參數(shù)的類型聲明為父類的指針。

這要我們就是實現(xiàn)了根據(jù)傳入的類型執(zhí)行不同的方法。這里的關鍵是子類在重寫父類的虛方法時是在虛方法表的相應位置對父類虛方法實現(xiàn)覆蓋。

舉個例子:

頭文件classFile.h:

 
 
 
  1. #ifndef classFile_Header_File   
  2. #define classFile_Header_File   
  3. class father   
  4. {   
  5. public:   
  6.     virtual void show();   
  7. };   
  8. class son: public father   
  9. {   
  10. public:   
  11.     void show();   
  12.     void sayhi();   
  13. };   
  14. #endif 

這里我們在子類中對父類實現(xiàn)了override(C++沒有提供override關鍵字,所以改寫父類的方法要格外小心)。

TestPoly.cpp代碼如下:

 
 
 
  1. #include   
  2. #include"classFile.h"   
  3. using namespace std;  
  4.  
  5. void hello(father* fp)   
  6. {   
  7.         fp->show();   
  8. }   
  9. int main()   
  10. {   
  11.     father f;   
  12.     hello(&f);   
  13.     son s;   
  14.     hello(&f);  
  15.  
  16. }  
  17.  
  18. inline void father::show()   
  19. {   
  20.     cout<<"I am father"<
  21. }  
  22.  
  23. inline void son::show()   
  24. {   
  25.     cout<<"I am son"<
  26. }  
  27.  
  28. inline void son::sayhi()   
  29. {   
  30.     cout<<"Hi, I am son"<

這里,傳入父類的指針將調用father::show(),傳入子類的指針時,雖然進行了隱式的類型轉化,但是由于子類在其繼承的虛方法表中相應的位置覆蓋了父類的show()方法,所用調用的實際上son::show()的內容。此時子類的方法表中不存在father::show()了,如果我們把virtual關鍵字去掉,那么father::show()和son::show()將同時存在與子類的方法表中。

那么如果子類做了父類沒用做的事情,我們應如何調用了?

比如這里,我們的子類中實現(xiàn)了sayhi()方法,這是父類指針father*無法獲取到的地址(實際是無法直接獲取到,通過手動的指針偏移還是可以的,不知道是C++的優(yōu)點還是缺點),這個地方,如果我們能夠通過實際傳入的對象指針類型進行操作就OK了。還好C++為我們提過了這個功能,那就是引入關鍵字dynamic_cast。

我們把hello()函數(shù)改寫如下:

 
 
 
  1. void hello(father* fp)   
  2. {   
  3.     son* ps=dynamic_cast(fp);//將fp 轉換為son*類型   
  4.     if(ps)//如果轉換失敗則返回0   
  5.         ps->sayhi();   
  6.     else   
  7.         fp->show();   

調用:

 
 
 
  1. int main()   
  2. {   
  3.     father f;   
  4.     hello(&f);//轉換失敗,執(zhí)行else   
  5.     son s;   
  6.     hello(&s); //輸出Hi,I am son  
  7.  

以下這篇博文對虛函數(shù)表講解非常清楚:

http://blog.csdn.net/hairetz/archive/2009/04/29/4137000.aspx

原文鏈接:http://www.cnblogs.com/DanielZheng/archive/2010/11/22/1884431.html

【編輯推薦】

  1. C語言對象編程構思
  2. C語言中的面向對象思想
  3. C語言中的DIV的用法及DIVAB概念解析
  4. 詳解Linux系統(tǒng)下搭建C語言開發(fā)環(huán)境
  5. 妙趣橫生的算法(C語言實現(xiàn))

本文標題:實例演示C++多態(tài)的實現(xiàn)過程
本文鏈接:http://m.5511xx.com/article/djeppdi.html