成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實例演示C++多態(tài)的實現(xiàn)過程

開發(fā) 后端
對于多態(tài)很多人還是不太了解,今天我們將通過實例來向大家演示一下C++多態(tài)的實現(xiàn)過程。

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

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

這要我們就是實現(xiàn)了根據(jù)傳入的類型執(zhí)行不同的方法。這里的關(guān)鍵是子類在重寫父類的虛方法時是在虛方法表的相應(yīng)位置對父類虛方法實現(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關(guān)鍵字,所以改寫父類的方法要格外小心)。

TestPoly.cpp代碼如下:

  1. #include<iostream>   
  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"<<endl;   
  21. }  
  22.  
  23. inline void son::show()   
  24. {   
  25.     cout<<"I am son"<<endl;   
  26. }  
  27.  
  28. inline void son::sayhi()   
  29. {   
  30.     cout<<"Hi, I am son"<<endl;   

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

那么如果子類做了父類沒用做的事情,我們應(yīng)如何調(diào)用了?

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

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

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

調(diào)用:

  1. int main()   
  2. {   
  3.     father f;   
  4.     hello(&f);//轉(zhuǎn)換失敗,執(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語言對象編程構(gòu)思
  2. C語言中的面向?qū)ο笏枷?/span>
  3. C語言中的DIV的用法及DIVAB概念解析
  4. 詳解Linux系統(tǒng)下搭建C語言開發(fā)環(huán)境
  5. 妙趣橫生的算法(C語言實現(xiàn))

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-09-01 18:29:10

C#繼承C#多態(tài)

2010-02-03 10:50:33

C++多態(tài)

2011-04-12 10:40:04

C++多態(tài)

2011-07-15 00:47:13

C++多態(tài)

2010-01-28 16:16:32

C++多態(tài)性

2010-06-01 16:50:29

MySQL存儲過程

2011-04-06 08:57:07

C++java多態(tài)

2015-03-23 10:04:43

c++編譯器c++實現(xiàn)原理總結(jié)

2009-08-18 10:17:25

C#枚舉類型

2010-05-26 17:57:44

MySQL 觸發(fā)器

2011-12-25 15:35:05

ibmdwJavaC++

2009-08-18 13:30:01

C#安裝與部署

2021-06-10 09:40:12

C++性能優(yōu)化Linux

2009-07-15 10:47:32

Java多態(tài)

2024-04-22 13:22:00

虛函數(shù)象編程C++

2009-08-26 15:35:59

C#虛函數(shù)

2024-01-23 10:13:57

C++虛函數(shù)

2010-02-05 16:07:52

C++多態(tài)覆蓋

2009-08-13 18:26:35

C#繼承構(gòu)造函數(shù)

2009-08-06 16:18:38

C#調(diào)用SQL存儲過程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 宅女噜噜66国产精品观看免费 | 日韩三极| 人人精品 | 狠狠热视频 | 在线成人免费视频 | 亚洲一区二区三区免费观看 | 亚洲精品视频免费观看 | 成人毛片网站 | 九九热精品视频在线观看 | 伊色综合久久之综合久久 | 亚洲午夜网 | 久热久草 | 亚洲欧美精品久久 | 久久国产综合 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 国产精品视频专区 | jdav视频在线观看免费 | 婷婷免费视频 | 免费在线观看黄网站 | 国产成人福利在线观看 | 美女网站视频免费黄 | 国产精品视频在线播放 | 99精品电影 | 久久一区二区三区四区 | 中文字幕日本一区二区 | 欲色av| 超碰在线网站 | 久久99国产精一区二区三区 | 成人av电影天堂 | 日韩在线视频一区 | 国产精品明星裸体写真集 | 色天天综合 | 桃花av在线| 狠狠入ady亚洲精品经典电影 | 最新免费视频 | 久久青草av | 久久亚洲精品国产精品紫薇 | 综合久久色 | 国产精品欧美大片 | 国产成人一区二区三区 | 色综合色综合色综合 |