網路程式設計專業大學生自薦書

文思社 人氣:7.97K

第一篇:計算機程式設計自薦書

網路程式設計專業大學生自薦書

尊敬的領導:

您好!

首先感謝您在百忙之中能抽出時間來閱讀我的自薦書!為一位滿腔熱情的中職生開啟一扇希望之門。

我的性格活潑開朗,是個不服輸的人。兩年前,我帶著美好的憧憬走進了中專的校園,我刻苦學習,力求向上,一直憑著“沒有最好,只有更好”的準則為之奮鬥,掌握了有關電子技術、plc程式設計,計算機應用等相關的專業知識,能熟練操作計算機辦公軟體,並考取了“全國計算機資訊高新技術”資格證書,我還利用課餘時間廣泛涉獵了大量書籍,不斷地充實自己。養成了嚴謹的學風和端正的學習態度,培養了樸實、穩重的性格特點。

現在,我以滿腔的熱情準備投身社會這個大熔爐中,我知道存在有很多艱難困苦,但我相信通過中專學習所掌握和獲取的知識和技能以及我對生活的熱愛能使我戰勝它們!我要在新的起點、新的層次上、以新的姿態展現新的風貌和熱情。面對當今激烈的社會競爭,我自知理論知識有限,但我相信我有著不甘落後和不斷學習的毅力,有對事業的熱情與執著,更有一顆真摯的心和拼搏進取的決定,這些這些會讓我不斷進步和取得成功。

希望貴企業能給我一個發展的平臺,我會好好珍惜並全力以赴,為實現自己的人生價值而奮鬥,為貴企業的發展貢獻力量。“吃得苦中苦,方為人上人”,我相信我一定會是盡責的員工。

最後,再次感謝您閱讀我的自薦信。祝貴企業事業欣欣向榮,業績蒸蒸日上!也祝您身體健康,萬事如意!

此致

敬禮

第二篇:網路程式設計實習報告

廣東應屆生實習報告網線上編輯整理本文。

[實習目的]

通過理論聯絡實際,鞏固所學的知識,提高處理實際問題的能力,併為自己能順利與社會環境接軌做準備。[實習任務]linux下網路伺服器開發;本文總結了我對linux下網路伺服器模型的認識。[實習內容]一.迴圈伺服器1.迴圈伺服器在同一個時刻只可以響應一個客戶端的請求,對多個客戶程式的處理是採用迴圈的方式進行;迴圈伺服器的實現非常簡單:udp伺服器每次從套接字上讀取一個客戶端的請求,處理,然後將結果返回給客戶機;2.1.演算法如下:socket(...);

bind(...);

while(1)

{

recvfrom(...);

process(...);

sendto(...);

}迴圈伺服器的實現也不難:tcp伺服器接受一個客戶端的連線,然後處理,完成了這個客戶的所有請求後,斷開連線;3.1.演算法如下:

socket(...);

bind(...);

listen(...);

while(1)

{

accept(...);

while(1)

{

read(...);

process(...);write(...);

}

close(...);

}迴圈伺服器一次只能處理一個客戶端的請求.只有在這個客戶的所有請求都滿足後,伺服器才可以繼續後面的請求.這樣如果有一個客戶端佔住伺服器不放時,其它的客戶機都不能工作了.因此,tcp伺服器一般很少用迴圈伺服器模型的.二.併發伺服器1.為了彌補迴圈tcp伺服器的缺陷,人們又想出了併發伺服器的模型。併發伺服器的思想是每一個客戶機的請求並不由伺服器直接處理,而是伺服器建立一個子程序來處理;2.使用併發伺服器可以使伺服器程序在同一個時刻有多個子程序和不同的客戶程式連線、通訊;在客戶程式看來,伺服器可以同時併發地處理多個客戶的請求;3.演算法如下:socket(...);

bind(...);

listen(...);

while(1)

{

accept(...);

if(fork(..)==0)

{

close(...);while(1)

{

read(...);

廣東應屆生實習報告網線上編輯整理本文。

process(...);

write(...);

}

close(...);

exit(...);

}

close(...);

}併發伺服器可以解決tcp迴圈伺服器客戶機獨佔伺服器的情況,改善了對客戶程式的響應速度;不過也同時帶來了一個不小的問題:為了響應客戶機的請求,伺服器要建立子程序來處理,而建立子程序是一種非常消耗資源的操作,這明顯增加了系統排程的開銷;5.為了解決建立子程序帶來的系統資源消耗,人們又想出了多路複用i/o模型.5.1.該模型一般用函式select和相關的四個巨集定義:intselect(intfd,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)

voidfd_set(intfd,fd_set*fdset)

voidfd_clr(intfd,fd_set*fdset)

voidfd_zero(fd_set*fdset)

intfd_isset(intfd,fd_set*fdset)5.2.一般的來說當我們在向檔案讀寫時,程序有可能在讀寫時候阻塞,直到一定的條件滿足.比如我們從一個套接字讀資料時,可能緩衝區裡面沒有資料可讀(通訊的對方還沒有傳送資料過來),這個時候我們的讀呼叫就會等待(阻塞)直到有資料可讀.如果我們不希望阻塞,我們的一個選擇是把socket設定為非阻塞模式來實現;intsocketfd;socketfd=socket(af_inet,sock_stream,0);fcntl(socketfd,f_setfl,o_nonblock);通過設定socket為非阻塞模式,可以實現“輪循”多個socket,當企圖從一個沒有資料等待處理的非阻塞socket讀取資料時,函式立即返回,但是這種“輪循”會使cpu處於忙等待方式,降低了效能,select函式解決了這個問題;5.3.在我們呼叫select時程序會一直阻塞直到以下的一種情況發生.1)有檔案可以讀.2)有檔案可以寫.3)超時所設定的時間到;5.4.演算法如下:初始化(socket,bind,listen

while(1)

{設定監聽讀寫檔案描述符(fd_*);

呼叫select;

如果是傾聽套接字就緒,說明一個新的連線請求建立

建立連線(accept);

加入到監聽檔案描述符中去;

否則說明是一個已經連線過的描述符

進行操作(read或者write);}

多路複用i/o

廣東應屆生實習報告網線上編輯整理本文。

可以解決資源限制的問題.著模型實際上是將udp迴圈模型用在了tcp上面.這也就帶來了一些問題.如由於伺服器依次處理客戶的請求,所以可能會導致有的客戶會等待很久。三.i/o模型1.網路伺服器模型根據i/o模型的不同實現而來的;2.i/o模型分為同步i/o和非同步i/o;同步i/o又包括阻塞i/o、非阻塞i/o、訊號驅動i/o、多路複用i/o;可根據不同的要求利用不同的i/o模型實現不同是網路伺服器。[實習心得]通過近幾個月的實習,基本上掌握了linux下c語言網路程式設計的一些演算法和技巧,提高了自己的能力。專業:計算機網路技術班級:03631學號:63103089姓名:呂亮亮——xx.05.23 

第三篇:網路程式設計實習報告

[實習目的]

通過理論聯絡實際,鞏固所學的知識,提高處理實際問題的能力,併為自己能順利與社會環境接軌做準備。[實習任務]linux下網路伺服器開發(基於c語言);本文總結了我對linux下網路伺服器模型的認識。[實習內容]一.迴圈伺服器1.迴圈伺服器在同一個時刻只可以響應一個客戶端的請求,對多個客戶程式的處理是採用迴圈的方式進行; 2. udp迴圈伺服器的實現非常簡單:udp伺服器每次從套接字上讀取一個客戶端的請求,處理, 然後將結果返回給客戶機;2.1.演算法如下(udp伺服器): socket(...);

bind(...);

while(1)

{

recvfrom(...);

process(...);

sendto(...);

}3. tcp迴圈伺服器的實現也不難:tcp伺服器接受一個客戶端的連線,然後處理,完成了這個客戶的所有請求後,斷開連線;3.1. 演算法如下(tcp伺服器):

socket(...);

bind(...);

listen(...);

while(1)

{

accept(...);

while(1)

{

read(...);

process(...);write(...);

}

close(...);

}3.2. tcp迴圈伺服器一次只能處理一個客戶端的請求.只有在這個客戶的所有請求都滿足後, 伺服器才可以繼續後面的請求.這樣如果有一個客戶端佔住伺服器不放時,其它的客戶機都不能工作了.因此,tcp伺服器一般很少用迴圈伺服器模型的.二. 併發伺服器1. 為了彌補迴圈tcp伺服器的缺陷,人們又想出了併發伺服器的模型。併發伺服器的思想是每一個客戶機的請求並不由伺服器直接處理,而是伺服器建立一個子程序來處理;2.使用併發伺服器可以使伺服器程序在同一個時刻有多個子程序和不同的客戶程式連線、通訊;在客戶程式看來,伺服器可以同時併發地處理多個客戶的請求;3.演算法如下(tcp伺服器):socket(...);

bind(...);

listen(...);

while(1)

{

accept(...);

if(fork(..)==0)

{

close(...);while(1)

{

read(...);

process(...);

write(...);

}

close(...);

exit(...);

}

close(...);

}4. tcp併發伺服器可以解決tcp迴圈伺服器客戶機獨佔伺服器的情況,改善了對客戶程式的響應速度;不過也同時帶來了一個不小的問題:為了響應客戶機的請求,伺服器要建立子程序來處理,而建立子程序是一種非常消耗資源的操作,這明顯增加了系統排程的開銷;5. 為了解決建立子程序帶來的系統資源消耗,人們又想出了多路複用i/o模型.5.1.該模型一般用函式select和相關的四個巨集定義:intselect(intfd,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)

voidfd_set(intfd,fd_set*fdset)

voidfd_clr(intfd,fd_set*fdset)

voidfd_zero(fd_set*fdset)

intfd_isset(intfd,fd_set*fdset)5.2. 一般的來說當我們在向檔案讀寫時,程序有可能在讀寫時候阻塞,直到一定的條件滿足.比如我們從一個套接字讀資料時,可能緩衝區裡面沒有資料可讀(通訊的對方還沒有傳送資料過來),這個時候我們的讀呼叫就會等待(阻塞)直到有資料可讀.如果我們不希望阻塞,我們的一個選擇是把socket設定為非阻塞模式來實現;int socketfd;socketfd=socket(af_inet,sock_stream,0);fcntl(socketfd,f_setfl,o_nonblock);通過設定socket為非阻塞模式,可以實現“輪循”多個socket,當企圖從一個沒有資料等待處理的非阻塞socket讀取資料時,函式立即返回,但是這種“輪循”會使cpu處於忙等待方式,降低了效能,select函式解決了這個問題;5.3. 在我們呼叫select時程序會一直阻塞直到以下的一種情況發生.1)有檔案可以讀.2)有檔案可以寫.3)超時所設定的時間到;5.4.演算法如下(多路複用i/o模型):初始化(socket,bind,listen);

while(1)

{ 設定監聽讀寫檔案描述符(fd_*);

呼叫select;

如果是傾聽套接字就緒,說明一個新的連線請求建立

建立連線(accept);

加入到監聽檔案描述符中去;

否則說明是一個已經連線過的描述符

進行操作(read或者write);}

多路複用i/o可以解決資源限制的問題.著模型實際上是將udp迴圈模型用在了tcp上面.這也就帶來了一些問題.如由於伺服器依次處理客戶的請求,所以可能會導致有的客戶會等待很久。 三.i/o模型1.網路伺服器模型根據i/o模型的不同實現而來的;2. i/o模型分為同步i/o和非同步i/o;同步i/o又包括阻塞i/o、非阻塞i/o、訊號驅動i/o、多路複用i/o;可根據不同的要求利用不同的i/o模型實現不同是網路伺服器。[實習心得] 通過近幾個月的實習,基本上掌握了linux下c語言網路程式設計的一些演算法和技巧,提高了自己的能力。專業:計算機網路技術 班級:03631 學號:63103089 姓名:呂亮亮——xx.05.23

第四篇:網路程式設計實習作業

網路程式設計實習作業

一. 實習內容:

? 瞭解插口(socket)實現原理。

? 在某一種平臺(linux,unix系列或windows系列)下進行網路客戶機-伺服器程式設計。

二. 主要參考書目:

? w. richard stevens, "unix network programming networking apis: scokets and xti (volume 1,second edition) ",清華大學出版社 prentice-hall international, inc. 或其中文版 “unix網路程式設計(第1卷,第2版)” 經典讀物,目前的最新版是第三版

? douglas comer,《用tcp/ip進行網際互連 第3卷:客戶機-伺服器程式設計和應用(第2版)》 或其英文版 internetworking with tcp/ip vol iii: client-server programming and application (second edition)以下簡稱《客戶機-伺服器程式設計》

三. 實習題目

1:編寫daytime服務的udp客戶機和伺服器的實現。

基本要求:

當伺服器端收到客戶端的請求後,將當前daytime返回給客戶端,客戶端收到該回應後,將收到的daytime顯示到輸出中。

(其中在linux或unix環境中,當前daytime的獲得參考函式time()和ctime())

2:熟悉http協議的請求和響應格式,編寫一個簡單的http伺服器。題目描述參考《自上而下計算機網路》(第三版 作者james f. kurose)第二章課後程式設計作業1。

基本要求:

1 正確解析http請求,實現簡單的get請求迴應。

2 模擬一個物件(如:檔案)的get迴應(如:迴應一個字串),對於其他的物件,則根據http響應格式迴應物件不存在資訊。3 通過瀏覽器可檢測自己的程式。如:輸入,檢視其響應結果。

4 對http請求的處理必須採用多程序實現,即主程序負責等待請求連線,每當收到一個請求後,產生一個子程序對該請求做單獨處理,主程序繼續等待新請求,子程序在處理完其請求後結束自己。詳細要求參考課本要求。(多程序程式設計參考函式fork())

要求:

源程式部分帶有必要的註釋,備有一份文件說明各個程式中的思路和關鍵技術。注意,只能使用c語言編寫。可以是windows或者linux下可執行,二種環境選擇一種即可。

評分標準

90% 以上 :在程式說明文件中,可以體現出自己對本程式所用到的技術有較深刻的理解。

程式有較好的可讀性(關鍵部分的註釋比較詳細)。

80% :符合要求,程式說明的比較詳細,思路比較清楚。

70% :只有程式沒有說明文件的,

70% - 60% :缺少說明文件

60% 以下 :程式或說明文件完全和別人的一樣 (抄襲於被抄襲者一樣處理)。

注:

1 作業包括程式部分(.c, , .h等原始碼和 等可執行檔案,不要 等其他檔案)和程式說明文件,檔案大小最好不要超過1m。

2 程式說明要體現出你所用到的關鍵技術,要說清楚自己定義函式的功能及實現,要有關鍵部分的流程圖。

3 要按時交作業,晚交的要相應的扣分。

4 請將程式打成一個包,包名統一採用“學號_姓名”形式,然後發到

network_

郵件的title也是“學號_姓名”

請一定將學號放在前面

5截至日期:2014年4月20日

(注:1. 以郵箱接收到的時間戳為準。 2. 在提交作業時,請最好選擇傳送並儲存郵件,避免由於投遞失敗而導致作業無法按時完成。(就是避免死無對證)3. 杜絕抄襲,請儘早開始著手這項作業)

第五篇:c++ 面試題(伺服器程式設計、網路程式設計方便)

c++ 面試題 - 專注於伺服器程式設計、網路程式設計 c++ 面試題

1.類成員指標

class test

{

public:

int fun(int) const;

int fun(int);

static int fun(int);

int itemp;

}

<!--[if !supportlists]-->1.1<!--[endif]-->非靜態成員函式指標定義:

int (test::*pfun)(int) = &test::fun;

int (test::*pfunconst)(int)const = &test::fun;

使用:

test a;

const test b;

(a.*pfun)(2) 或 (a.*pfunconst)(2);

(b.*pfunconst)(2);

不能用(b.*pfun)(2);

<!--[if !supportlists]-->1.2<!--[endif]-->非靜態成員變數int test::*pint = &test::itemp;

(a.*pint) = 3;

<!--[if !supportlists]-->1.3<!--[endif]-->靜態成員函式指標int (*pfun)() = &test::fun;

或 int (*pfun)() = test::fun; 都正確;(注:定義無域操作符)使用:

(*pfun)() 或 pfun() 都正確;

2.非成員函式指標和靜態成員函式一致。

3.非成員函式和靜態成員函式上不允許修飾符。例如 void fun() const; void fun() volatile;但非靜態 成員函式允許const、volatile等修飾符。

4.變數修飾符

auto:指定資料儲存在棧中。區域性變數預設為auto。該修飾符不能用於成員變數和全域性變數。

static: 區域性變量表示儲存在靜態空間,全域性變量表示不允許外部引用。

volatile:表示該變數可能隨時改變,不要做任何假設優化。

mutale: 去除成員變數的const屬性。

extern:全域性變數預設為extern屬性,表示可被外部引用,此時與static相對。

extern int a =2; 表示定義一個可被外部引用的變數。

extern int a; 表示引用外部變數。

5.資料型別隱式轉換

短資料->長資料 (eg: float -> double)

有符號->無符號 (eg: int -> unsigned int )ps: 所以 int(-1)>unsigned int(1);

低精度->高精度 (eg: int -> float)

py 有“防重疊”覆蓋機制,strcpy 沒有。

t表示

共計32位,摺合4位元組

由最高到最低位分別是第31、30、29、……、0位

31位是 符號位,1表示該數為負,0反之。

30-23位,一共8位是指數位。

22-0位,一共23位是尾數位。

每 8位分為一組,分成4組,分別是a組、b組、c組、d組。

每一組是一個位元組,在記憶體中逆序儲存,即:dcba

8.不能在類的宣告中初始化類常量,而只能在建構函式初始化列表來初始化

9.類中的列舉常量不佔用物件的儲存空間

10.有時候函式原本不需要返回值,但為了增加靈活性如支援鏈式表達,可以附加返回值。

11.賦值函式,應當用“引用傳遞”的方式返回string 物件。如果用“值傳遞”的方式,雖然功能仍然正確,但由於return 語句要把 *this 拷貝到儲存返回值的外部儲存單元之中,增加了不必要的開銷,降低了賦值函式的效率。

12.對於非內部資料型別的物件而言,光用maloc/free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式, 物件在消亡之前要自動執行解構函式。如果用free 釋放“new 建立的動態物件”,那麼該物件因無法執行解構函式而可能導致程式出錯。如果用delete 釋放“malloc 申請的動態記憶體”,理論上講程式不會出錯,但是該程式的可讀性很差。

13.如果用new 建立物件陣列,那麼只能使用物件的無引數建構函式,delete時如果物件沒有解構函式,則delete和delete[]是功能相同的。

14.只能靠引數而不能靠返回值型別的不同來區分過載函式。編譯器根據引數為每個過載函式產生不同的內部識別符號。並不是兩個函式的名字相同就能構成過載。全域性函 數和類的成員函式同名不算過載,因為函式的作用域不同。

15.關鍵字inline

必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。定義在類宣告之中的成員函式將自動地成為行內函數。

以下情況不宜使用內聯:

(1)如果函式體內的程式碼比較長,使用內聯將導致記憶體消耗代價較高。

(2)如果函式體 內出現迴圈,那麼執行函式體內程式碼的時間要比函式呼叫的開銷大。

16.只有靜態常量整型資料成員才可以在類中初始化,普通成員只能在初始化列表或函式內初始化,常量成員只能在初始化列表。成員物件初始化的次序完全不受它們在 初始化表中次序的影響,只由成員物件在類中宣告的次序決定。

17.拷貝建構函式和賦值函式非常容易混淆,常導致錯寫、錯用。拷貝建構函式是在物件被建立時呼叫的,而賦值函式只能被已經存在了的物件呼叫。

18.不想編寫拷貝建構函式和賦值函式,又不允許別人使用編譯器生成的,則只需將拷貝建構函式和賦值函式宣告為私有函式,不用編寫程式碼。

19.“const t”和“t const”總是都被允許的,而且是等效的。

注意在常量指標(const pointer)中,“const”永遠出現在“*”之後。

例如:

int *const p1 = q; //指向int 變數的常量指標

int const* p2 = q; //指向int 常量的指標

const int* p3 = q; //指向int 常量的指標

20.一個常見的微妙問題是,一個函式風格的巨集並不遵守函式引數傳遞的規則。

21.沒有引用陣列,但可有指向陣列的引用,並且保留陣列的邊界。

22.左值擁有儲存值的位置,而右值則沒有相關地址,只是簡單值。

23.負索引是可以的,如p[-2]或(-2)[p]都是可以的(p必然不能是陣列名),但必須保持不越界。

sum=p()+q()+r();不能保證p(),q(),r()呼叫的順序。

逗號運算子","可以保證求值順序lt= ( p(),q(),r() );是先求p(),q(),然後將r()賦給result

24.在if的條件裡宣告變數,且可在真假分支裡面使用。

const int * const * p;p是個指標,指向常指標的,常指標指向一個常量int。

25.不能用空白初始化列表來規定預設的物件初始化.

class a;

a a(); //會警告,看起來像函式宣告

a *p=new a(); //ok

a *p=new a;//ok

26.可以寫一句只有數字的程式碼,如1234;(void)0;可以編譯執行,相當於nop。

27.給函式指標賦值時可以對函式名取地址也可以不取,通過函式指標呼叫函式時可以用*也可不用。

ic_cast可以轉換基本資料型別(int->char)、void*和有型別指標、基類和派生類指標的轉換(多重繼承也行,它可重新計算偏移地址),但是不能轉換如(int*->char*等)。

mic_cast主要用於執行"安全的向下轉型",reinterpret_cast可執行任何轉換,const_cast執行去 const轉換。

30.將取地址運算子用到完全限定的類成員名(包括變數和函式),就能獲得指向成員的地址。使用形式為"x::*"來宣告一個指向類x成員的指標。注意宣告成員 函式指標的時候不能像普通函式指標可以省略&或*的使用,但靜態成員函式則除外,它和普通函式一致。成員指標和普通指標不一樣,並非指向一個記憶體 區域,而是相當於一個結構的偏移量,當它和具體的物件結合就能指向特定物件的特定成員。

31.當把派生類物件賦給基類物件的時候會產生切割現象,即針對派生類的資料和行為將產生切割。

32.多維陣列的第1個元素是陣列而非普通型別。

33.在含有單引數建構函式的類中注意隱式轉換。如string s="hello";

34.函式物件是過載函式呼叫運算子的類物件。

35.引用需要用左值進行初始化,但指向常量的引用除外,編譯器將建立一個臨時左值。如const int c=12;//ok 一般情況下編譯器產生的臨時物件的生命期在它所在的最大表達式範圍內,但用臨時物件初始化常量物件的引用時會讓編譯器保證臨時物件和引用生命週期一樣。

36.可以將基類的成員指標(變數或函式)安全的轉換為指向派生類成員的指標,但反之則不安全。

37.函式引數的傳遞是採用拷貝建構函式而非賦值操作。對未初始化的物件賦值可能會出現意外,如類中含有未初始化指標。

38.宣告但不定義私有的拷貝構造和賦值運算將會關閉類的複製操作。並且賦值運算、拷貝建構函式和解構函式不會被繼承,對派生類過載賦值運算時需要呼叫基類的賦 值運算。

39.在建構函式裡對成員變數初始化,比較好的方式是使用初始化列表。在初始化列表中靜態成員和陣列不能被初始化。

類的初始化順序是虛擬基類的成員->非虛基類成員->類自身成員,和初始化列表的順序無關。 含有虛擬基類和不含的類在成員佈局上不一樣,含有虛擬基類的類將虛擬基類的資料放在最後面。另外如b:virtual a,c:virtual a,d:b,c;(均是虛繼承)則d的建構函式將對a初始化一次(即使在初始化列表沒有顯式初始化a),b,c將不再對a初始化。

所有靜態資料(全域性變數和靜態儲存變數)在使用前如未初始化其值都為0.全域性變數可以儲存在靜態初始化區和未初始化區。

返回值優化,是指在函式返回中執行拷貝初始化到直接初始化(使用帶非物件引數的建構函式)的轉換,nrv和rvo類似,但使用命名區域性變數來儲存返 回值。p160

41.過載、覆蓋和隱藏的區別

過載的特徵:在同一個類,函式名相同,引數不同,virtual可有可無。

覆蓋的特徵:在兩個類(基類和派生類),函式名和引數都相同, 且必須有virtual關鍵字。

隱藏的特徵:基類函式名和派生類函式名相同引數不同,且不管是否有關鍵字。或函式名、引數均相同,但基類 函式沒有virtual(有的話就是覆蓋)。

不能覆蓋而只能隱藏基類非虛擬函式。

42.相同型別的所有物件公用一個虛擬函式表,在單繼承下不管有多少個虛擬函式都只有一個虛擬函式表指標。覆蓋就是在為派生類構造虛擬函式表時用派生類的函式地址替換基 類成員函式地址的過程。

43.使用常量類成員可能在對類物件賦值的時候產生問題。

44.有時候我們可能會看到 if (null == p) 這樣古怪的格式。不是程式寫錯了,是程式設計師為了防止將 if (p == null) 誤寫成 if (p = null),而有意把p 和null 顛倒。