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在下方插入...