TC PL Chapter 2 讀書筆記

2021-05-01 19:04:39 字數 2289 閱讀 2256

a tour of c++

what is c++

bj本人給出的解釋是

--a better c

--support data abstraciton

--support oop

--support gp

/*以往的程式設計正規化*/

資料抽象是為了讓使用者定義型別像內部型別一樣定義和使用

decide which types you want;

provide a full set of operations for each type.

通過宣告乙個類實現了使用者定義型別,包括建構函式,析構函式,可以讓使用者定義型別的定義和使用與內部定義型別相同

當從假型別轉換為乙個使用者定義型別的時候乙個特性丟失了,就是沒有把表達與使用者介面完全隔離開來

class stack ; // used as exception

class overflow ; // used as exception

class bad_size ; // used as exception

stack (ints); // constructor

~stack() ; / / destructor

void push (char c);

char pop ();

};如bj所說,stack的具體實現依賴於它的私有成員,而對於他們的訪問只能通過內部的成員函式,也就是說當使用者需要做一些改變的時候,必須修改class stack,重新編譯。這是讓使用者定義資料型別像內部型別一樣工作的代價。

如果我們需要把乙個型別的修改與實現完全隔離,就需要用到virtual等語法

class stack ; // used as exception

class overflow ; // used as exception

virtual void push (char c ) = 0 ;

virtual char pop () = 0 ;

};以上的inte***ce可以作為任何提供了以上兩個虛函式的具體實現的類的inte***ce,也就是說任意形式的stack都可以從以上繼承而來

push()pop()的實現由stack的子類來實現,這樣的機制同時也支援了c++的多型性,這種多型性也就是 一種介面,多種實現。

可以通過 基類的指標或者引用 的型別來呼叫子類中不同版本的虛函式

例子:#include <iostream.h>

class point  //螢幕上的點類

{int x,y;

public;

point(int x1,int y1)

{x=x1;y=y1;}

virtual void showarea()

{cout<<″area of point is:″<<0.0<<endl;}

};class circle:public point//圓類

{int radius;

public:

circle(int x,int y,int r):point(x,y)

void showarea(){cout<<″area of circle is:″<<3.14

*radius*radius<<endl;}

};void disparea(const point*p) //多型程式段

{p->showarea();}

void main()

{circle c1(1,1,1);disparea(&c1);

}這裡的正確的結果是area of circle is:1

那麼如何分辨不同虛函式版本的呼叫呢,一種實現方法就是vtbl,為每個派生類加上乙個vtbl指標,這樣做會產生相應的額外開銷。

oop 

這裡更像是對前面的總結,其中描述的在前面的小節中基本都已經出現

類繼承的機制以及以上就提出了oop的程式設計正規化

decide which classes you want;

provide a full set of operations for each class;

make commonality explicit by using inheritance.

確定你需要的類,為每個類提供一組操作,用繼承明確得表示共性

當然並不是所有的專案都需要找出一組共性才是最優的方案

gp泛式

包括資料型別和演算法,基本理念與上面相同,將實現與使用者使用和型別隔離,利用template等語法

其代表就是stl的容器以及演算法

一種語言不可能是完美的,如果對於某個專案支援完美,那麼對於另外乙個必然是有欠缺的,而c++被設計用於廣泛應用。

Thinking in C 第2版第一卷讀書筆記

thinking in c pdf電子書 c 中先編譯,後連線 編譯 將原始碼編譯為 連線 將庫函式和各種自定義函式依次連線成為乙個可執行檔案。c 中 include 不再使用 h字尾 include 變在了 include include 呼叫程式 控制台方式 system 程式名 include...

Thinking in C 第2版第一卷讀書筆記

thinking in c pdf電子書 c 中先編譯,後連線 編譯 將原始碼編譯為 連線 將庫函式和各種自定義函式依次連線成為乙個可執行檔案。c 中 include 不再使用 h字尾 include 變在了 include include 呼叫程式 控制台方式 system 程式名 include...

《Visual Studio 程式設計師箴言》讀書筆記

技巧1.1 在空白行上按ctrl c不會丟失剪貼簿的內容 工具 選項 文字編輯器 所有語言 常規 沒有選定內容時對空行應用剪下或複製命令 技巧1.2 迴圈使用剪貼簿 ctrl shift v 技巧1.3 插入空行 使用ctrl enter在上方插入一行,使用ctrl shift enter在下方插入...