亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

多態與面向對象(一)

2019-11-18 12:07:40
字體:
來源:轉載
供稿:網友

  不管時光如何流逝,應該說每個人對他職業生涯的第一次面試都是記憶猶新。不是嗎?
  
  經過前兩輪的篩選,我推開那扇門,小心翼翼地坐在Andy面前。我應聘的職位是C++程序員。坦率的講,我有一些緊張。您知道的,一個找不到工作的應屆大學生,生活是如何地布滿壓力。
  
  “能告訴我什么是OO嗎?”Andy一開口就是這樣一句。
  
  我有預感,他將主要考察我在面向對象方面的編程能力。我知道C++支持數種不同的程序設計風格,包括面向過程的編程風格(PRocedural Programming)、泛型編程風格(Generic Programming)、基于對象的編程風格(Object-base Programming)和面向對象的編程風格(Object-oriented Programming)??墒鞘裁词荗O呢?具體概念,我還真的不大清楚。
  
  “分析問題時,我們經常會把事物看作一個一個的對象,把具有相同特征的對象看作一個類......”我想他是不是在期待這樣的答案呢。
  
  “那你對OB又作何解釋呢?”Andy面無表情。
  
  對呀,所謂OB,就是被稱作ADT(Abstract Data Template)的程序設計風格,我剛剛所說的不也被OB所支持嗎?一直以為自己在使用面向對象編程技術,誰知道......哎,真是慚愧啊。
  
  “是的,應該說OO留給我印象最深的還是繼續和多態?!爆F在我只能盡量回想我曾參與過的少得可憐的項目以尋求答案。
  
  “幾乎每個人都同意繼續和多態是OO概念,可是據我所知,真正理解這兩個概念的卻不多。時間有限,我們就談談多態。你知道C++以哪些方法支持多態嗎?”顯然他不想在我身上花太多時間。
  
  這個問題對于我還是不難回答的。例如有以下繼續體系:
  
  其中rotate是一個虛擬函數,C++ 以三種方法支持多態。其一,經由一組隱含的轉化操作,如把一個派生類指針轉化為一個指向其公有基類類型的指針:
  
  shape *ps = new circle();
  
  其二,經由虛擬機制,如
  
  ps->rotate();
  
  其三,經由dynamic_cast和typeid運算符。如
  
  if (circle *pc = dynamic_cast(ps)) ......
  
  “多態的主要用途是經由一個共同的接口來影響類型的封裝,這個接口通常被定義在一個抽象的base class中。這個接口是以virtual function機制引發的,它可以在執行期根據object的真正類型解析處到底是哪一個函數實體被調用?!背脽岽蜩F,我敢肯定假如還不能趁此機多說幾句的話,那將是前功盡棄。
  
  “假如我寫下這樣的代碼又將怎樣呢?”Andy飛快地在一張紙片上寫下:
  
  circle p;
  
       shape s(p);
  
       s.rotate();
  
  以一派生類對象為初值初始化一個基類對象!這是我的第一反應。
  
  “這會發生所謂的對象切割,同時多態不再呈現?!彪m然我敢肯定我所說的話語,可我總感覺Andy另有它意。
  
  “為什么多態不再呈現?”他的眼神流露出一絲疑問。
  
  “因為多態的特性只有在使用pointer或reference時才能發揮?!蔽液敛华q豫的回答。
  
  “好吧,請你講講曾參與過的設計?!盇ndy似乎已經達到目的。后來我才知道,C++通過class的pointer和reference來支持多態,這種程序設計風格就是所謂的OO。
  
  我想起曾經參與的一個項目,我的主要任務是通過串口來控制一種叫做云臺的外設,其實就是根據通信協議將客戶請求翻譯成相應的字符串,然后通過串口發送出去??雌饋砗芎唵危菃??不過,為了爭取更大的市場,我們必須盡可能多的支持不同廠商提供的不同協議,并且能夠在未來方便地加入當前尚未支持的協議。當時的設計就似乎這樣子:
  
  class CPtzHal
  
  {
  
  public:
  
       CPtzHal(CSerial *pSerial, CProtocol *pProtocol);
  
       void sendCommand(int command);
  
  private:
  
       CSerial    *m_pSerial;
  
       CProtocol *m_pProtocol;
  
  };
  
  成員函數sendCommand的定義如下:
  
  void CPtzHal::sendCommand(int command)
  
  {
  
       if(m_pSerial != NULL && m_pProtocol != NULL)
  
       {
  
            m_pSerial->send(m_pProtocol->getCommandString(command));
  
       }
  
  }
  
  您看,我們使用CPtzHal 來接受并處理用戶的請求。CProtocol 就是我們的協議類,通過其成員函數getCommandString 得到指定的請求ID所對應的應該發往串口的字串;CSerial實際上是串口類,而CSerial::send的作用當然是把指定的字串發送出去。
  
  “那么,你是怎么保證方便的添加新協議呢?”Andy輕輕移了移身體。
  
  “如您所知,CProtocol理所當然是一個基類,而且我把它設計成一個抽象基類,所有的具體的協議類都將從它派生?!蔽揖従徴f道,同時寫下以下代碼:
  
  class CProtocol
  
  {
  
  public:
  
       virtual ~CProtocol(){};
  
       virtual string getCommandString(int) = 0;
  
  };
  
  “您看,因為是一個基類,其析構函數當然要聲明為virtual……”
  
  “等等,既然析構函數什么都不做,為什么要給它一個空的函數體?”Andy開始試探我。
  
  “正如我剛才所說,我是有義務要聲明它們的。本來我也不想給出實現,可是即使我同意,編譯器也不會答應啊。”
  
  “嗯,不錯?!盇ndy的首肯令我頗有些難為情。
  
  “至于每一個具體的協議類,都必須實現在CProtocol中聲明的那些純虛函數(pure virtual function)?!蔽绎w快地寫出以下代碼:
  
  class CIntelProtocol : public CProtocol
  
  {
  
  public:
  
       string getCommandString(int command);
  
  };
  
  
  
  string CIntelProtocol::getCommandString(int command)
  
  {
  
       // 返回相應的字串
  
  }
  
  “您看,CIntelProtocol正是封裝了英特爾的協議。當有新的協議加進來的時候,做法就如同以上一般,從CProtocol派生出一個新的協議類?!?
  
  從Andy的表情可以看出,他還算滿足。作為協議類的客戶,CPtzHal并不需要知道這個具體協議到底是英特爾的還是三星的,說不準它是將來某個別的廠商所提供的??墒沁@有什么關系呢?不管這點如何改變,CPtzHal壓根就不用變。這,正是多態所帶來的好處。
  
  我和Andy的對話就這樣結束了嗎?不,還沒有。這正如我要跟你講的有關OOP的故事,還將繼續。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大全免费观看电视剧大泉洋| 久久久av亚洲男天堂| 日韩久久午夜影院| 国产在线一区二区三区| 亚洲久久久久久久久久久| 成人精品视频久久久久| 成人黄色生活片| 国产精品成人v| 午夜美女久久久久爽久久| 亚洲国产精品电影| 亚洲欧美激情在线视频| 亚洲国语精品自产拍在线观看| 成人免费福利在线| 亚洲成人国产精品| 国产精品国产自产拍高清av水多| 亚洲国产精品va在线看黑人| 亚洲国产精品大全| 欧美成人免费播放| 欧美日产国产成人免费图片| 日韩中文娱乐网| 曰本色欧美视频在线| 欧美电影免费观看高清完整| 日韩午夜在线视频| 亚洲激情第一页| 国产欧美一区二区三区视频| www.美女亚洲精品| 欧美成人午夜影院| 国产成人激情小视频| 亚洲女同精品视频| 欧美国产高跟鞋裸体秀xxxhd| 国产亚洲精品激情久久| 亚洲人成绝费网站色www| 国产成人一区二区三区小说| 九九热这里只有精品免费看| 91免费在线视频| 78m国产成人精品视频| 亚洲人成77777在线观看网| 成人国产精品一区| 精品精品国产国产自在线| zzjj国产精品一区二区| 中文字幕在线观看亚洲| 国产成人啪精品视频免费网| 欧美日产国产成人免费图片| 国产欧美在线看| 91精品国产自产在线老师啪| 国产色婷婷国产综合在线理论片a| 国产婷婷成人久久av免费高清| 久久精品国产成人精品| 亚洲国产毛片完整版| 5252色成人免费视频| 96pao国产成视频永久免费| 中文字幕亚洲精品| 日韩精品在线观看一区二区| 亚洲午夜久久久影院| 亚洲黄色片网站| 琪琪亚洲精品午夜在线| 国语自产在线不卡| 国产美女直播视频一区| 宅男66日本亚洲欧美视频| 欧美精品一本久久男人的天堂| 国产在线一区二区三区| 亚洲va久久久噜噜噜久久天堂| 国产+成+人+亚洲欧洲| 狠狠躁夜夜躁人人躁婷婷91| 欧洲成人在线观看| 美日韩丰满少妇在线观看| 欧美一级黑人aaaaaaa做受| 午夜欧美不卡精品aaaaa| 精品国产老师黑色丝袜高跟鞋| 欧美床上激情在线观看| 免费99精品国产自在在线| 在线丨暗呦小u女国产精品| 91久久精品美女高潮| 国产精品久久久91| 欧美大片在线影院| 91精品视频一区| 97国产精品人人爽人人做| 久久综合免费视频| 成人免费网站在线观看| 永久免费看mv网站入口亚洲| 精品久久久久久电影| 日本最新高清不卡中文字幕| 欧美精品videos性欧美| 午夜精品国产精品大乳美女| 国产丝袜精品第一页| 久久久久久久久中文字幕| 色爱精品视频一区| 欧美激情视频播放| 亚洲国模精品一区| 国内精品400部情侣激情| 日本在线观看天堂男亚洲| 成人在线一区二区| 国产在线观看精品一区二区三区| 亚洲国产私拍精品国模在线观看| 97国产一区二区精品久久呦| 日韩av综合网站| 久久久久久久91| 久久久久久久久久婷婷| 欧美亚洲国产日本| 亚洲欧美日韩中文在线制服| 欧美精品18videosex性欧美| 91美女片黄在线观| 91精品国产综合久久香蕉| 欧美性xxxx在线播放| 国产精品情侣自拍| 亚洲视频axxx| 热久久视久久精品18亚洲精品| 国产精品国产福利国产秒拍| 欧美电影免费看| 欧美中文字幕视频| 亚洲激情视频网站| 2018中文字幕一区二区三区| 国产精品视频播放| 欧美一级淫片丝袜脚交| 亚洲男人天堂2024| 日韩成人在线免费观看| 日韩高清a**址| 久久久爽爽爽美女图片| 成人黄色av播放免费| 日韩欧美在线播放| 欧美另类69精品久久久久9999| 日本午夜在线亚洲.国产| 亚洲欧美中文在线视频| 欧美wwwxxxx| 亚洲精品一区二区网址| 91在线高清免费观看| 日韩电影免费在线观看中文字幕| 国产在线视频一区| 欧美老女人xx| 欧美性生交xxxxx久久久| 欧美夜福利tv在线| 深夜成人在线观看| 成人福利网站在线观看11| 国产在线久久久| 欧美专区中文字幕| 日韩精品在线播放| 成人福利视频在线观看| 国产激情久久久久| 国产视频久久久久| 亚洲第一在线视频| 欧美孕妇与黑人孕交| 日韩精品一区二区三区第95| 亚洲自拍偷拍网址| 日韩精品视频在线| 成人免费网站在线观看| 欧美激情国产精品| 欧美大全免费观看电视剧大泉洋| 91精品国产91久久久久久不卡| 久久久精品2019中文字幕神马| 欧美日韩中国免费专区在线看| 欧美日韩亚洲成人| 久久视频在线直播| 欧美激情a∨在线视频播放| 欧美高清第一页| 亚洲美女激情视频| 欧美最猛性xxxx| 久久福利视频导航| 亚洲色图偷窥自拍| 欧美国产日韩一区| 亚洲欧美日韩精品久久奇米色影视| 久久精品国产96久久久香蕉| 国产日韩综合一区二区性色av| 欧美精品videosex性欧美| 亚洲第一页在线|