《C 程式語言》學習筆記2

2021-08-25 16:30:39 字數 1394 閱讀 3615

程式語言(c++)學習的指導思想:

focus on programming techniques, not on language features.

2.1 c++設計思想

(1)能提供使用者介面成員函式

(2)只有通過使用者介面才能訪問資料privite

(3)初始化、掃尾重構,虛構函式

(4)使用者**與實現**隔離封裝

2.2 資料抽象,類繼承oop的基本思想

(1) 作者首先通過「棧」的例子引出使用繼承的好處:實現在基類中不定義成員變數,使使用者與資料更好的隔離開來;在通過「形狀shape類」的例子說明,使用繼承的機制,可以通過派生類來定義不同的形狀,方便使用者根據實際需求來定義形狀,即可繼承基類的好方法,還能自己新增其他特性

(2) 用含有虛函式的類定義的物件,都有虛函式表,該錶的位址位於物件空間的頂部;

(3) 資料抽象,貌似就是使用者可以自己定義運算子的功能(比如讓+號不在做加法)

c++程式,通常分為3個檔案:類宣告(***.h),類實現(***.cpp),使用類(main)。這種分成三個檔案進行編譯並不是c++的做法,而是模組化程式的設計方法。

一定要通過成員函式來完成對類中功能的監測。例如:設計乙個stack類,要通過成員來監測棧是否溢位,而不是通過使用者**來判斷棧是否溢位。

讓某項資料操作(補足乙個字串)支援標註的資料操作,才是比較完美的。如:字串支援「+」操作,str1 + str2。寫乙個成員函式也可以實現str1 + str2,但這種用函式來實現功能並不是好的做法。資料抽象:就是讓使用者能對自己定義的物件使用標準的操作(+、-)。通過這種「"資料抽象"的方式,可以讓加號做的不在是加法!

為了將使用者與資料更好的隔離開,類中(這裡指基類)不要定義區域性變數。不定義成員變數,成員函式怎麼實現資料互動?解決方法:定義乙個不含成員變數的基類,其他派生類中在定義成員變數!

每個含有虛函式的類都有它的虛函式表,這應該是編譯器內部自己實現的。

花功夫去為基類尋找類間的共性是很有必要的。

范型是用模板(見筆記1)來實現的,用模板定義好乙個類後,往這個類中填入不同型別的變數,都能適應。

ch3 tour of standand library

1、cin遇到空格會預設結束字串,getline()不會。cin無法獲取空格字元

2、容器:vector, list, map

vector:順序儲存,占用連續儲存空間,可隨機訪問其中元素

list:雙向列表儲存,只能順序訪問,但隨機插入效率較高

map:成對存放關鍵字/值的list容器

3、迭代器(iterator)是容器和演算法(操作)之間的一座橋梁;比如可以通過迭代器來對向量容器排序...迭代器就類似指標!

《C 程式語言》學習筆記2 演算法

1.如演算法find在乙個序列中查詢乙個值,返回的結果是指向找到的元素的迭代器 p的型別string iterator s包含字元c嗎?bool has c const string s,char c 1.有多少種容器就有多少種迭代器,有多少種特殊要求就有多少種迭代器 2.如list iterato...

c語言學習筆記2

陣列 一 陣列定義 一維陣列 型別說明符 陣列名 常量表示式 例如 int a 10 二維陣列 型別說明符 陣列名 常量表示式 常量表示式 例如 float 3 4 多維陣列 例如 float a 2 3 4 字元陣列 與一維陣列類似 說明1.不允許對陣列的大小做動態定義,即陣列的大小不依賴於程式執...

C語言學習筆記(2)

sizeof a sizeof int int a int a 以下四種函式原型是等價的 陣列的單元表達的是變數,需要用 取位址。運算子可對陣列做,也可對指標做 p 0 a 0 運算子可以對指標使用,也可對陣列做 陣列變數是型別const指標,因此不能變賦值 int a int const b 1 ...