第一章 致讀者部分(學習筆記)

來源:互聯網
上載者:User

1.2、如何 學習C++

   在學習C++時要集中關注概念,而不要迷失在語言的技術細節之中。學習語言的目的是成為一個更好的程式員,也就是使自己在設計和實現新系統時工作更有成效。

   C++支援多種程式設計風格,這些實現依賴於C++的強型別的檢查,目的是獲得一種高層次的抽象。

 每種語言都可以成為如何寫C++程式的一個豐富的思想泉源,但這些思想必須轉化為某種能夠適應C++的一般結構和類型系統的東西,以便能夠出現在不同的環境中。如果去顛覆一個語言的基本類型系統,可能得到的至多是伊魯斯式的勝利。

 C++支援一種逐步推進的學習方式,你學習一個新語言的方式依賴於你已經知道些什麼還依賴於你的學習目的。假定你學習C++的意圖並不簡單學習一種新的文法形式,要去做某些已經習慣做的事情,而是想學習一種構造系統的新的更好的方式。這件事只能逐漸完成,需要經過實踐。

 你將要在還沒有完全理解所有的語言特徵和和技術之前就去使用C++,常常去構造的實際的系統。通過支援多種程式設計範型,C++支援在不同掌握程式上進行生產性的程式設計。 

 存在著一些獨立開發和發行的C++實現,有許多的工具、庫和軟體開發環境可以使用。推薦參考來源:[Barton,1994]、[Booch,1994]、[Henricson,1997]、[Koeing,1997]、[Martin,1995]。

1.3、C++的設計

 簡單性是一個重要的設計準則:如果在一個地方有一個選擇,簡化語言定義或者簡化編譯器,那麼我們一定先前者。

 C++沒有進階的資料類型,也沒有進階的基本操作。舉例來說C++沒有提供帶有求逆運算的矩陣類型,也沒有帶拼接運算的字串類型。使用者如果需要一個類型,那麼可以在語言本身之中定義它。事實上,定義新的通用或者專用的類型就是在C++裡最基本的程式設計活動。一個設計良好的使用者類型與內部類型之間的差異僅僅在於定義的方式,而不在其使用的方式。

 在C++的設計中,極力避免了那些即使不用也會帶來已耗用時間或者空間額外開銷的特徵。

    C++ 的類型檢查和資料隱藏特徵依賴於編譯時間對程式的分析,以防止因為意外而破壞資料的情況。它們並不提供系統安全性或者防止某些人有意地打破這種規則。它們當然可以隨意使用而不會帶來額外的時間和空間開銷。

1.3.1、效率和結構

C++是以C程式設計語言為基礎開發出來的,除少量例外,它繼續維持了以C作為一個子集。除了new、delete、dynamic_cast,以及throw運算子和try-塊(try-block)之外,C++的各種運算式和語句都不需要在特殊的運行時支援。

1.5 C++的使用

   C++能夠有效用到那些需要在各種各樣的不同應用領域中工作的應用系統上.很容易找到一個應用系統,其中涉及到區域網路或者廣域網路、數值處理、圖形與使用者的互動以及資料的訪問。C++並不是已經設計出的各種語言中最小和最清晰的。但不管怎樣,它是:

   1.對於教授基本概念而言清晰。

 2.對於深刻的項目而言足夠現實、高效和靈活。

 3.對於依賴各種不同開發和執行環境的組織或研究機構而言,使用起來足夠方便。

 4.對於教進階概念和技術的媒介而言,足夠的容易理解。

 5.對於作為從學習到非學術使用的工具而言,也足夠的商業化。

1.6.1 給C程式員的建議

 一個人對C越瞭解,在寫C++程式時大概就越難避免C的風格,並會因此丟掉潛在的C++優勢。這裡有幾個要點,在這些地方做同樣的事情的時候,存在C++比C更好的方式:

[1].在C++裡幾乎不需要宏,用constenum定義明顯的常量,用inline避免函數調用的額外開銷,用template去刻畫一族函數或類型。用namespace避免名字衝突。

 [2].不要在你需要變數以前去聲明它,以保證你能立即對它進行初始化,聲明可以出現在能出現語句的所有位置上,可以出現在for語句的初始化部分,也可以出現在條件中。

 [3].不要用malloc(),new運算子能將事情做得更好,對於relloc(),請試一試vector()。

 [4].試著去避免void *、指標算術、聯合和強制,除了在某些函數的類的實現深層之外。大部分情況下強制都是設計錯誤的指標。你如果必須使用某個顯式的類型轉換,請設法去用一個"新的強制"(即定義新的類型),設法寫出一個描述你想做的事情更精確的語句。

 [5].盡量少用數組和C風格的字串,與傳統的C風格相比,用用標準庫stringvector都可以簡化程式。

1.6.2 給C++程式員的建議

 經常可以看到這種情況,有經驗的C++程式員不公很多年沒有注意引進的新特徵,也沒有看到特徵之間關係的變化,而這些情況使一些全新的程式設計技術變成可行的東西了。換句話說,你在第一次使用和學習C++時沒想到的或者不切實際的,或許今天已經變成了一種高明的方式。你只有通過重新考察基礎的東西才能弄清楚它們。

1.8 忠告

寫好一個程式需要智慧、品味和耐性。你不會第一次就把它搞好的。實驗!

 [1].在編程式時,你是在為你針對某個問題的解決方案中的思想建立起一種具體的表示。讓程式的結構儘可能地直接反映這些思想:

[a]如果你能把它看成一個獨立的概念,就把"它"做成一個類。

  [b]如果你能把它看成一個獨立的實體,就把"它"做成一個類的對象。

  [c]如果兩個類有共同的介面,將些介面做成一個抽象類別。

  [d]如果兩個類的實現有某些顯著的共同東西,將這些共性做成一個基類。

  [e]如果一個類是一種對象的容器,將它做成一個模板。

  [f]如果一個函數實現對某容器的一個演算法,將它做成一個對一族容器可用的模板函數。

  [g]如果一組類、模板等相互之間有邏輯關係,將它們放進一個名字空間裡。

 [2].在你定義一個並不是實現某個像矩陣的或者複數這樣的數學對象時,或者定義一個低層次的類型如鏈表的時候:

 [a]不要使用全域資料(使用成員);

  [b]不要使用全域函數。

  [c]不要使用公用資料成員。

  [d]不要使用友元,除非為了避免[a]與[c]。

  [d]不要在一個類裡面放"類型域";採用虛函數。

  [f]不要使用線上函數,除非為了效果顯著的最佳化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.