語言常見問題解 1 15

2021-03-31 08:56:58 字數 3629 閱讀 3371

你也可以拿到 postscript 和 adobe acrobat 的版本:

ftp://research.att.***/dist/stdc++/wp

也能拿到 html 和 ascii 的版本:

ftp://ftp.cygnus.***/pub/g++

也能拿到書面版本:

x3 secretariat

1250 eye street nw

suite 200

washington, dc 20005

202-626-5738

你也可以用 email:

[email protected] (lynn barra)

註明要索取最新的 "draft proposed american national standard for information

systems -- programming language c++",檔案編號 cd14882。它通常是用2日期的

fedex(美國境內)來遞送的,所以很快就能收到。

****************************************

q8:c++ 對 ansi-c 回溯相容嗎?

幾乎是。

c++ 盡可能地和 c 相容,但不能更相容了。事實上,主要的不同在於 c++ 要求函式

原型:"f()" 宣告的是無引數的函式(在 c 裡,"f()" 和 "f(...)" 是一樣的)。

還有些細微的差別,像在 c++ 裡 sizeof('x') 等同於 sizeof(char),但在 c 裡面

卻是等同於 sizeof(int)。 而且,c++ 直接就把結構的卷標(tag)當成是型別的名

字,但 c 就需要加個 "struct" 字("typedef struct fred fred" 這種技巧仍然能

用,但在 c++ 中是累贅的)。

****************************************

q9:多久才能學會 c++?

像 paradigm shift 公司,成功地教授過標準的工業界「短期課程」,將大學一學期

的課壓縮到一周 40 小時。然而真正的精通得由實際經驗而來:沒有東西能取代時間

。需動手做的指定專題是必要的,因為它們能將你的觀念「凝固成形」。

大約要 6-12 個月才能流利使用 c++/oop,如果身邊有高手的話,費時會短些;反之

若沒有個「好的」通用型 c++物件鏈結庫,則會耗時更久。想成為顧問級的高手,則

約需 3 年。

有些人卻根本辦不到。除非你是可造之材,且有強烈的個人驅動力,否則你也做不到

。「孺子可教」最起碼的要求是:你必須能「覺今是而昨非」。「驅動力」最起碼的

要求是:你願意多投入時間精力(改變思考的方式〔典範轉移 paradigm shift〕要

遠比學些新的東西來得困難)。

*************************

■□ 第4節:c++ 的基礎

*************************

q10:什麼是類別(class)?

物件導向系統的基石。

類別是用來定義資料型態(data type)的,就像 c 的 struct 一樣。

以資訊科學術語來說,乙個型態包含了一組狀態(state),以及在狀態之間轉移的

動作行為(operation)。因此 "int" 是個「型態」,因為它有一組狀態,還有諸如

「加兩個整數」、「整數相乘」等等的運作行為。同樣的,「類別」提供一組(通常

是公共的)運算,及一組(通常是非公共的)資料域位,以代表該型態的案例所擁有

的抽象值。以 c 的角度來看,類別就是其成員(members)皆預設為 "private" 的

struct。

把 "int" 想成是個類別,它擁有 "operator++" 等等的運作行為(method)。

****************************************

q11:什麼是物件(object)?

一塊賦有某種語意的儲存空間。

在宣告 "int i;" 之後,我們稱「i 是個 int 型態的物件」。在 c++/oop 裡,「物

件」通常意指「類別的案例(an instance of a class)」,因此類別定義了數個物

件(案例)的行為。

****************************************

q12:什麼是參考(reference)?

乙個物件的「別名」(alias,另乙個名稱)。

參考通常用於傳址呼叫(pass-by-reference):

void swap(int& i, int& j)

main()

在這裡 "i" 和 "j" 分別是是 main 函式中 "x" 與 "y" 的別名,換句話說,"i" 就

是 "x"--不是個指向 "x" 的指標,也不是 "x" 該值的複製品,而它的的確確就是

"x" 本身。你對 "i" 做的任何動作,都會反映到 "x" 上;反之亦然。

從最底層來看,參考最常用指標來實作,它的效果有點像 c 裡頭的「傳指標呼叫」

(pass-by-pointer),但 "&" 取址運運算元由呼叫者換到被呼叫者之處了,你也要刪

去所有的 "*" 運運算元。

****************************************

q13:如果設定某值給參考會怎麼樣?

會更動到被參考者(referrent,該「參考」所參考到的物件)。

記住:「參考」就是「被參考者」,因此動了參考就會改動到被參考者(「參考」是

「被參考者」的左值 "lvalue"〔出現在設定陳述的左邊〕)。

更進一步,我們也允許參考被傳回。這樣子函式呼叫就可放在設定陳述的左邊,這對

運運算元多載的場合很有用。

****************************************

q14:怎樣才能將參考改設成別的物件?

沒有辦法。

和指標不同,一旦參考被繫結到某個物件,它就不能再被改設到其它物件去。「參考

」本身不是乙個物件(它自己沒有位址;「取參考的位址」只會得到被參考者的位址

;切記:「參考」就是「被參考者」)。

將「參考」與「被參考者」分離開來是不可能的。

****************************************

q15:何時該用參考,何時又該用指標?

可以時,用參考;必要時,就用指標。

當你不需要「重設」它時(見前乙個問題),參考會比指標好。這通常意味著:在物

件類別的公共介面中參考最有用。參考大多用於物件的表層,而指標則多用於裡層。

但有乙個例外:當函式引數或傳回值需要乙個「臨界」(sentinel)的參考值時,最

好是用指標來做,以 null 指標做為乙個特別值(「參考」應該是個實質物件的「別

名」,而不是個解參用的〔dereferenced〕null 指標)。

注意:老資格的 c 程式設計師不喜歡參考,因為在父程式的地方,「參考」的語意並不

是那麼明顯。然而有了些 c++經驗後,會發現這正是一種「資訊隱藏」的作法,是利

而非弊。好比說,程式設計師應該以切近該問題的方式來寫程式,而非以機器的語言來解

題。

常見問題解答

怎麼判斷乙個exe可執行檔案是用什麼語言開發的?答 請試試peid偵殼工具吧!批處理命令中注釋符號是什麼?答 1 注釋內容 第乙個冒號後也可以跟任何乙個非字母數字的字元 2 rem 注釋內容 不能出現重定向符號和管道符號 3 echo 注釋內容 不能出現重定向符號和管道符號 nul 4 if not...

C語言常見問題

在c語言中,有乙個 流 的概念 流可以分為兩種型別 文字流 檔案 和二進位製流 檔案 文字流是解釋性的,最長可達255個字元 二進位製流是非解釋性的,一次處理乙個字元。在用c語言程式設計的時候,我們都是用 include指令包含型別為 h 的檔案,那麼可以用該指令包含型別不為 h 的檔案嗎?答案是 ...

C語言常見問題

1 嵌入式與微控制器的區別 從軟體上,行業裡經常把晶元中不帶mmu memory management unit記憶體管理單元 從而不支援虛擬位址,只能裸奔或執行rtos 實時作業系統,例如ucos 華為liteos rt thread freertos 的system,叫做微控制器 例如stm32...