c 高階程式設計感悟(一)

2021-06-18 16:03:59 字數 2203 閱讀 4476

最近在看c++高階程式設計   ,把從這書書中學到的程式設計思想和程式設計方法 分享給大家,大家在一起也感悟一下

一 :使用關鍵字continue會使程式跳轉到迴圈的開始處,使用關鍵字break會使程式跳出迴圈,這兩種方式打破了迴圈,使程式實現了任意跳轉。這是不好的程式設計風格。

二:在c++中,盡量避免使用#define,而傾向於使用const來定義常量。const引用引數的主要意義在於它能提高效率,向乙個函式傳遞乙個變數時,會建立乙個完整的副本,如果傳遞乙個引用,只是傳遞了原變數的指標,這樣計算機就無需為之建立副本,通過傳遞乙個const引用,能盡享這兩方面的優勢,不用建副本,而且建立的物件也不會被修改。

使用指標而不是引用有很多優點:

1)     引用比指標更安全,因為引用不會直接處理記憶體的位址,而且不會null

2)     在風格上,引用也比指標有優越性,因為引用使用的是棧變數的語法,避免了使用*等符號,引用更容易使用!

(3)在編寫程式之前,先不要寫具體任何**,而應當首先設計程式,你要使用什麼資料結構,編寫什麼類?在團隊中這顯得尤其重要!

三:(1)程式設計文件(程式體系結構規範)

1)將程式按部分劃分為多個子系統,包括子系統間的介面和依賴關係,子系統間的資料流。在各系統之間來回的輸入和輸出,以及總的執行緒模式

2)各個子系統的具體細節,包括進一步細分的類、類的層次體系、資料結構。演算法。特定的執行緒模式和錯誤處理細節

在程式設計時遇到困難時的結解決方案

(1)在程式設計的過程中如果遇到問題,可以向導師。同事。求助

(2)查閱參考書 ,瀏覽網頁

(3)與別人合作一段時間,再來看以前的設計方案

(4)做出決定,繼續設計

四:c++設計原則

(1)抽象

關鍵考慮介面和實現

(2)重用(**重用和思想重用)

標準資料結構 、演算法和模式,了解c++標準庫中的**,以及任何可供使用的專用**

大o記法(適用於速度依賴於輸入的演算法)

用來說明演算法和庫的效能,主要來說明演算法效能隨著輸入規模增大時帶來的變化!

五:**格式

(1)大括號對齊(2)小括號和空格(3)建議使用總是使用將製表符解釋為4個空格的編輯器

六:static成員和成員函式

(1)靜態方法並不是在乙個特定的物件上呼叫,他沒有this指標,而且不能對乙個特定的物件來訪問非靜態成員!

七:切割問題:產生在向上型別轉換的過程中!

如果直接把繼承類賦給基類,會對繼承類進行切割,但是如果把繼承類賦給基類的引用或基類的指標就不會產生切割!這種方法也稱為向上型別轉換。

只有在必須並且能保證使用動態型別轉換的時候才能使用向下型別轉換!

八:關鍵字explicit的作用

關鍵字explicit可以禁止「單引數建構函式」被用於自動型別轉換

class stack

explicitstack(int size);

沒有explicit的話stack s = 40;能編譯通過

而有explicit則不能,必需stack s(40);

九:關於運算子過載的一點常識

1)定義類的運算子函式時,只有在運算子的左側是該類時,才能被呼叫,若左側不是該類,則呼叫會出現問題

2)為避免呼叫出現的問題,可以把運算子過載函式定義為全域性的函式,這樣對左側 。右側的資料就不回產生影響了

十:使用介面和實現類

介面和實現分離的好處是,可以讓介面更清晰,又隱藏實現的細節。但不好的地方在於,這可能會帶來安全隱患。基本的原則是,分別定義兩個類:乙個介面類,乙個實現類。實現類和寫的普通類沒區別,介面類提供了實現類所提供的方法,但它只有乙個資料成員,即指向實現類物件的指標。介面類方法實現只是只是呼叫實現類物件上對應的方法

十一:有關繼承的技巧

(1)      不要猶豫,將所有的方法宣告為virtual函式,以備將來在子類中擴充套件

(2)      超類的引用或者指標知道是它的乙個子類,也不能呼叫超類中所沒有的的方法或成員

(3)      超類指標或引用在引用子類時,子類仍會保留它們覆蓋的方法,而在強制轉換為超類物件時,子類會喪失它們的獨有特性。覆蓋方法和子類資料的都是稱為切割

十二:協變返回型別

在c++中,只要原來的型別是指向類的指標或引用,新的型別是指向派生類的指標或引用,覆蓋的方法就可以改變返回型別。

也就是說 以前函式中如果返回物件,該物件是啥型別就返回啥型別的物件,在繼承的時候這樣做是可以的,即返回型別是基類指標或引用,而實際返回的卻是它的子類物件

C高階程式設計筆記一

有關螢幕操作的函式 void clrscr void 該函式將清除視窗中的文字,並將游標移到當前視窗的左上角,即 1,1 處。void clreol void 該函式將清除當前視窗中從游標位置開始到本行結尾的所有字元,但不改變游標原來的 位置。void delline void 該函式將刪除一行字元...

C 高階程式設計筆記(一)

c 與.net c 本身是一種語言 net framework是乙個平台即乙個環境。只是c 編譯器專門用於.net,所以c 總是使用.net執行。net framework 的核心是執行執行環境 公共語言執行庫clr net執行庫 在clr下執行的 稱為託管 mannaged code clr對於源...

c 高階程式設計

std normal distributiondis1 0,1 std default random engine random time null for i 0 i 10 i std cout這個乙個正態分佈函式,mean of the distribution its expected val...