麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

一個(gè) C++ 日期類(第一部分)

2019-11-17 05:31:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原文出處:Code Capsules:A C++ Date Class, Part 1

本文適合初級(jí)讀者

  ChUCk Allison 是鹽湖城圣 Latter Day 教堂總部下耶穌教堂家族歷史研究處的軟件體系設(shè)計(jì)師。他擁有數(shù)學(xué)學(xué)士和數(shù)學(xué)碩士學(xué)位。他從1975年起開始編程,從1984年起他開始從事c語(yǔ)言的教學(xué)和開發(fā)。他目前的愛(ài)好是面向?qū)ο蟮募夹g(shù)及其教育。他是X3J16,ANSI C ++標(biāo)準(zhǔn)化委員會(huì)的一員。發(fā)送e-mail 到 [email protected],或者撥打電話到 (801)240-4510 均可以與他取得聯(lián)系。
  上個(gè)月的專欄里介紹了一個(gè)日期間隔函數(shù),它可以算出任意兩個(gè)日期之間的年,月和日。這個(gè)月的專欄則提出了一個(gè)用C++解決該問(wèn)題的方法。這種方法的本質(zhì)是創(chuàng)建一種新的數(shù)據(jù)類型,這種數(shù)據(jù)類型的行為就像內(nèi)建的數(shù)據(jù)類型一樣。換句話說(shuō),你要從基于函數(shù)的方法 (“我想要怎么樣做事”)轉(zhuǎn)換到基于對(duì)象的方法(“我的問(wèn)題的原理和對(duì)象是什么”)。使用C++非常需要另外一種思考問(wèn)題的方法。為了實(shí)現(xiàn)這個(gè)轉(zhuǎn)換,首先要先知道為什么會(huì)有C++存在。

關(guān)于兩種語(yǔ)言的故事

  C++源自80年代早期 AT&T 的 Bjarne Stroustrup 提出的“帶類的 C”。他那時(shí)正在尋求在 Simula-67 中更快的進(jìn)行仿真的方法。"class"是 Simula 中用來(lái)指用戶自己定義的類型的術(shù)語(yǔ),能夠定義出非常接近現(xiàn)實(shí)的對(duì)象,這是進(jìn)行良好的仿真的要害。有沒(méi)有一種更好的方法,能夠比在c語(yǔ)言--最快的過(guò)程化語(yǔ)言中加入"class"的概念更快的進(jìn)行仿真呢?
  選擇C為類提供了一個(gè)不僅有效而且靈活的工具。雖然一些其他的語(yǔ)言在C++之前很久就支持通過(guò)類來(lái)對(duì)數(shù)據(jù)進(jìn)行抽象,但是C++用的最廣泛。幾乎每一種主要的具有C語(yǔ)言編譯器的平臺(tái)同樣能夠支持C++。最后我還聽說(shuō),C++的用戶群每七個(gè)月就會(huì)翻一番。
  對(duì)C++的最初了解是令人吃驚的。假如你是從C語(yǔ)言轉(zhuǎn)過(guò)來(lái)的話,你需要把下面這些詞語(yǔ)加進(jìn)你的詞匯表:抽象類,存取控制,基類,catch子句,類,類的作用域,構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),缺省參數(shù),缺省構(gòu)造函數(shù),delete運(yùn)算符,派生類,析構(gòu)函數(shù),異常,異常處理,友元,繼續(xù),內(nèi)聯(lián)函數(shù),操作符,成員函數(shù),多重繼續(xù),嵌套類,new處理函數(shù),new操作符,重載,成員指針,多態(tài),私有,保護(hù),公有,純虛函數(shù),引用,靜態(tài)成員,流,模板,this指針,try塊,類型安全連接,虛基類,虛函數(shù)。
  一個(gè)好消息說(shuō)C++是一種強(qiáng)大的、有效的、面向?qū)ο蟮摹⒛軌蛱幚砀鞣N復(fù)雜應(yīng)用的語(yǔ)言。壞消息則是這種語(yǔ)言本身就比較復(fù)雜,比C語(yǔ)言難把握。C語(yǔ)言是造成這一問(wèn)題的一部分。C++是一個(gè)混血兒,既有面向?qū)ο蟮奶卣鳎钟型ㄓ孟到y(tǒng)編程語(yǔ)言的特征。我們不可能純粹介紹C++這一系列豐富的新特征而不一點(diǎn)也不考慮C語(yǔ)言本身。對(duì)C的兼容性是C++設(shè)計(jì)時(shí)的一個(gè)主要目標(biāo)。正如Bjarne在ANSI C++委員會(huì)上所陳述的那樣,C++是一種"工程上的折衷",它"要和C語(yǔ)言盡可能的接近,但又不能太接近"。到底要多接近現(xiàn)在還在研究中。

一個(gè)漸進(jìn)的過(guò)程

  你可以很有效的使用C++而不需要把握它的全部。事實(shí)上,面向?qū)ο蟮募夹g(shù)承諾說(shuō)只要開發(fā)商做好他們的事情(提供設(shè)計(jì)良好的、可重用并且可擴(kuò)展的類庫(kù)),那么你就可以很輕易的開發(fā)你的應(yīng)用程序。目前的產(chǎn)品,比如Borland公司的應(yīng)用編程接口,在許多方面都證實(shí)了這一點(diǎn)。
假如你覺(jué)得你必須把握這門語(yǔ)言,你可以循序漸進(jìn)并且在這個(gè)過(guò)程中繼續(xù)開發(fā)你的應(yīng)用程序。這里有三個(gè)必須把握的地方:
  1. 一個(gè)更好的C語(yǔ)言
  2. 數(shù)據(jù)抽象
  3. 面向?qū)ο蟮木幊?/li>
  你可以把C++當(dāng)成一門更好的C語(yǔ)言來(lái)使用,因?yàn)樗踩挥诒憩F(xiàn)力。與這一點(diǎn)相關(guān)的特征有:類型安全連接,強(qiáng)制函數(shù)原型,內(nèi)聯(lián)函數(shù),const限定詞(是的,ANSI C從C++中借鑒的這個(gè)詞),函數(shù)重載,缺省參數(shù),引用和語(yǔ)言提供的對(duì)動(dòng)態(tài)內(nèi)存治理的支持。你同樣需要當(dāng)心這兩種語(yǔ)言不兼容的地方。C語(yǔ)言中有一個(gè)強(qiáng)大的子集,Plum 和 Saks 稱其做"類型安全的 C"(參見(jiàn) C++ PRogramming Guidelines, Plum and Saks, Plum-Hall, 1992)。
  正如我在這篇文章和下一篇文章中所陳述的一樣,C++支持?jǐn)?shù)據(jù)抽象--用戶可以自己定義行為與內(nèi)建類型相像的數(shù)據(jù)類型,這種數(shù)據(jù)抽象機(jī)制包括:類,存取限制,構(gòu)造和析構(gòu)函數(shù),運(yùn)算符重載,模板和異常處理。
  面向?qū)ο蟮某绦蛟O(shè)計(jì)通過(guò)探求類與類之間的關(guān)系在數(shù)據(jù)抽象上更進(jìn)一步。其中兩個(gè)要害的概念是繼續(xù)(通過(guò)聲明一個(gè)新類與另一個(gè)類的相似與區(qū)別定義它,其中的相似被重用)和多態(tài)(為一族相關(guān)的操作提供同一個(gè)接口,運(yùn)行時(shí)識(shí)別)。C++分別通過(guò)類的派生和虛汗數(shù)來(lái)支持繼續(xù)和多態(tài)。




  一個(gè)類就是一個(gè)擴(kuò)展的struct。除了定義數(shù)據(jù)成員,你還可以為其添加成員函數(shù)。日期類的定義在文件data.h中的 Listing 1。它與上個(gè)月的C版本不同,因?yàn)樵谶@里interval函數(shù)是一個(gè)成員函數(shù)而不是全局函數(shù)。Date::interval()的實(shí)現(xiàn)在 Listing 2 中。"::"叫做作用域運(yùn)算符。它告訴編譯器interval函數(shù)是Date類的成員函數(shù)。interval函數(shù)原型中的"&"說(shuō)明這個(gè)函數(shù)的參數(shù)由應(yīng)用傳遞(參見(jiàn)關(guān)于引用的選項(xiàng))。Listing 3 中的程序展示了如何使用這個(gè)日期類。你必須使用結(jié)構(gòu)成員的語(yǔ)法來(lái)調(diào)用 Date:: interval():result = d1.interval (d2);   Date作為類型標(biāo)識(shí)符,就像系統(tǒng)內(nèi)建類型一樣的發(fā)揮作用(例如,你可以定義Date的對(duì)象而不使用struct要害字)。永遠(yuǎn)也不必做如下的定義:typedef struct Date Date;   事實(shí)上,類的概念是如此的基本,以至于C++已經(jīng)將結(jié)構(gòu)標(biāo)簽和普通的標(biāo)識(shí)符結(jié)合成一個(gè)獨(dú)立的名字空間。
  注重我已經(jīng)將isleap定義成了一個(gè)內(nèi)聯(lián)函數(shù)(在C版本中它是一個(gè)宏)。內(nèi)聯(lián)函數(shù)像宏一樣將代碼展開,但它也像普通函數(shù)一樣進(jìn)行作用閾和類型的檢查。除非你要使用the stringizing or token-pasting Operations of the preprocessor,,否則在C++中不需要使用 function-like 的宏。現(xiàn)在考慮 Listing 2 中的這個(gè)聲明:years = d2.year - year;year指的是什么對(duì)象?在C版本中,這個(gè)聲明如下:years = d2.year - d1.year;   既然成員函數(shù)的調(diào)用總是與對(duì)象相關(guān)聯(lián)(例如,d1. interval (d2)),因此當(dāng)成員函數(shù)沒(méi)有前綴修飾的時(shí)候,通常是相關(guān)聯(lián)對(duì)象的成員(在這里,year 指的是d1.year)。this要害字代表一個(gè)指向潛在對(duì)象的指針,因此我可以做一個(gè)更加明確的聲明:years = d2.year - this->year;但是這種用法很少。 在 Listing 4 中,我在類的定義中添加了如下的聲明:Date();Date(int,int,int);   這是一種非凡的成員函數(shù)叫做構(gòu)造函數(shù)。構(gòu)造函數(shù)答應(yīng)你在一個(gè)對(duì)象被創(chuàng)建的時(shí)候指定怎么樣初始化這個(gè)對(duì)象。當(dāng)你定義一個(gè)沒(méi)有初始值的日期對(duì)象時(shí),首先調(diào)用缺省構(gòu)造函數(shù)(因?yàn)樗鼪](méi)有任何參數(shù)):Date d;下面的聲明調(diào)用第二個(gè)構(gòu)造函數(shù):Date d(10,1,51);   當(dāng)成員函數(shù)的實(shí)現(xiàn)比較簡(jiǎn)單的時(shí)候,你可以把它們的實(shí)現(xiàn)移到類的定義里面去,使它們成為內(nèi)聯(lián)函數(shù)(參見(jiàn) Listing 7 ——不要忘記在 Listing 5 中移走它們)。Listing 6 中的測(cè)試程序推遲構(gòu)造對(duì)象d1、 d2 和 result 直到需要它們的時(shí)候(在C++中,對(duì)象的定義可以出現(xiàn)在任何聲明中)。
  我?guī)缀跻呀?jīng)列舉了數(shù)據(jù)抽象,也就是封裝的主要特征。當(dāng)一個(gè)用戶自定義類型的內(nèi)部表現(xiàn)和外部接口設(shè)計(jì)良好,就叫做一個(gè)封裝。我確實(shí)定義了一個(gè)和系統(tǒng)內(nèi)建類型一樣作用的新類型,我不答應(yīng)任何無(wú)意間的對(duì)它的內(nèi)部表現(xiàn)的訪問(wèn)制。例如,像這樣,用戶可以執(zhí)行如下的語(yǔ)句:[1] [2]
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产乱淫a∨片免费观看 | 精品一区久久久 | 3344永久免费 | 中文字幕国产亚洲 | 羞羞视频2023 | 欧美成年人在线视频 | 成人国产在线看 | 久国久产久精永久网页 | 91久久另类重口变态 | 一级做a爱片性色毛片高清 日本一区二区在线看 | 激情久久免费视频 | 少妇色诱麻豆色哟哟 | 一日本道久久久精品国产 | 欧美成人精品一区二区男人小说 | 久久99国产精品视频 | 线观看免费完整aaa 久久不雅视频 | 久久激情免费视频 | 毛毛片在线看 | 二区三区四区视频 | 亚洲福利在线观看视频 | 九九看片 | 国产在线区 | 久久久久亚洲精品 | 久久免费视频一区 | 91资源在线观看 | 国产成人高清在线观看 | 成人在线观看小视频 | 日韩色视频 | 一级黄片毛片免费看 | 国产精品久久久久久久久久东京 | 九九看片 | 久草在线视频在线 | 黄色试看视频 | 免费a级毛片大学生免费观看 | 成年人黄色免费网站 | 国产精品久久亚洲 | 手机国产乱子伦精品视频 | 国产一国产一级毛片视频在线 | 九九精品免费 | 欧美日韩高清一区二区三区 | 国产一级一国产一级毛片 |