存在這樣一組過程,如果把它們包含到乙個型別的計算基中,就能方便地把物件放入各種資料結構,或者通過演算法把物件從乙個資料結構複製到另一資料結構.我們稱具有這樣的基的型別為規範的(regular),因為使用這樣的型別可以保證程式行為的規範性,進而獲得型別之間的互操作性.1 可以從內部型別,如bool、int,以及限制到良形式值的double,看到規範型別的語義.乙個型別是規範的,當且僅當它的基包含了相等檢查、賦值、析構操作、預設構造操作、拷貝構造操作、乙個全序判斷2 和乙個基礎型別. 3
相等判斷是乙個過程,它以同型別的兩個物件為引數,當且僅當兩個物件的狀態相等時返回真.同樣應該定義不等判斷,它應返回相等判斷的否定.我們使用下面記法:
賦值(assignment)是乙個過程,它以同型別的兩個物件為引數,使得第乙個物件等於第二個,但並不修改第二個物件.賦值的意義不依賴於第乙個物件的初值.我們使用下面記法:
析構操作(destructor)是乙個過程,它結束乙個物件的存在.對乙個物件呼叫析構操作之後,就不能再將任何過程作用於它,而且它以前的儲存位置和資源都可以用於其他用途了.析構操作經常被隱式地呼叫.全域性物件在應用程式
1.雖然規範性是stl的設計基礎,其正式定義最早出現在文獻dehnertandstepanov[2000]中.
2.嚴格的說法要到第4章才能說清楚,它可以是乙個全序,或者乙個預設的全序.
3.基礎型別在第12章定義.
終止時銷毀(析構),區域性物件在它們宣告所在的塊退出時銷毀,資料結構的元素在資料結構銷毀時也被銷毀.
構造操作(constructor)是乙個過程,它把一些儲存位置變換到乙個物件.其可能行為可以是什麼也不做,也可以是建立極其複雜的物件.
乙個物件處於部分成形(partiallyformed)狀態,如果它已經可以賦值或銷毀.對於部分成形但尚未完全成形的物件,除了賦值(放在左邊)和析構,做其他任何過程的效果都無定義.
引理1.3 良形式的物件也是部分成形的.
預設構造操作(defaultconstructor)沒有引數,且能使物件達到部分成形的狀態.我們將採用下面記法:
拷貝構造操作(copyconstructor)有乙個同型別的引數,它構造出乙個等於該引數的新物件.我們將採用下面記法:
《程式設計原本 》一導讀
本書將演繹方法應用於程式設計,討論程式與保證它們能正確工作的抽象數學理論之間的聯絡.書中把反映這些理論的規程 speci.cation 基於這些理論寫出的演算法,以及描述演算法性質的引理和定理一起呈現給讀者.這些演算法在一種實際程式語言裡的實現是本書的中心.雖然規程主要是供人閱讀,但它們也應該 或者...
《程式設計原本 》一1 4 過程
乙個過程 procedure 是乙個指令序列,它修改某些物件的狀態,也可能構造或 者銷毀一些物件.根據程式設計師的意圖,與乙個過程互動的物件分為四類.1.輸入輸出 input output 指該過程通過其引數或返回值直接或間接傳遞的那些物件.2.區域性狀態 localstate 該過程在其一次呼叫期...
《程式設計原本 》一2 3 碰撞點
如果不知道定義而只能觀察其行為,我們無法確定乙個變換的一條特定軌道是否無窮,因為它完全可能在任意一點結束或者迴圈.如果知道一條軌道是有窮的,那就可以用乙個演算法來確定該軌道的形狀了.因此,本章針對軌道的所有演算法都有乙個有關軌道有窮性的隱含前條件.顯然可以寫乙個簡單而平凡的演算法,讓它儲存已訪問的每...