複習10 類 續

2021-05-24 14:35:25 字數 1838 閱讀 1293

10.4.4 區域性變數

10.4.4.1 物件的複製

如果t1和t2都是table物件,t2=t1的預設含義就是把t1按成員逐個複製給t2.這種複製方式應用到具有指標成員的物件時,可能會產生意料之外的作用。具體的例子就省略了。使用編譯器生成的預設的拷貝建構函式與此一樣。為了避免這種麻煩,需要顯式定義拷貝建構函式和過載=運算子。

10.4.5 自由儲存

對new產生的物件多次使用delete釋放他,結果是未定義的。

10.4.6類物件作為成員容器類club的建構函式使用了成員初始式列表,它由冒號開頭,用逗號隔開。成員的建構函式將在容器類本身的建構函式體執行前執行。這些建構函式按照成員在類中宣告的順序執行,而不是按這些成員在初始式表中出現的順序。為了避免混亂,最好還是按照宣告的順序描述這些初始式。在類本身的析構函式執行之後,各成員的析構函式按照相反的順序逐個執行。所以無需也不要在類的構造或析構函式中呼叫成員的構造或析構函式。

10.4.6.1 成員初始化的必要性

對於那些初始化與賦值不同的情況--即對於那些沒有預設建構函式的類的成員物件,對於那些const成員和引用成員而言,對成員的初始式是必不可少的。也不存在對這些成員作初始化的其他方式,而且,不對這種成員作初始化就是錯誤。強烈建議使用初始式的語法形式,他不僅符合c++的設計而且使得程式設計師邏輯清晰。

10.4.6.2 成員常量

對於類的靜態整形(包括列舉)成員,可以給他的成員宣告加上乙個常量表示式作為初始式。其他任何形式的帶有初始式的宣告都是錯誤的。

10.4.6.3 成員的複製

10.4.7 陣列

物件陣列與普通陣列有所不同,陣列中的物件必須初始化。定義陣列有兩種方式,一是形如table tbl[10]僅給出陣列的大小,這樣將會採用table的預設建構函式初始化這10個物件。還可以採用還有初始式的方式顯式地為每乙個陣列物件呼叫建構函式,如table tbl[3] = ;

當乙個陣列被銷毀時,它將對各個元素呼叫析構函式。這裡插入點delete的東東:由於c++不區分指向陣列的指標和指向元素的指標(指向陣列的指標實際上指向了陣列的第乙個元素)故使用delete和delete作用與陣列第乙個元素分別是釋放乙個元素和釋放了整個陣列。對於其他的情況都是未定義的,也是應該避免的。

10.4.8 區域性靜態儲存

10.4.9 非區域性儲存

這一點與非區域性變數一致。

10.4.10 臨時物件

臨時物件經常作為算術表示式的結果出現。如求值x*y+z的中間結果x*y就是臨時物件,必須存在某個地方。

除非有乙個臨時物件被約束到某個引用或者被用於做命名物件的初始化,否則它將總在建立它的完整表示式結束時銷毀。完整表示式是指不是其他表示式的子表示式的表示式。考慮如下函式,這是個常見的錯誤。為了比避免這樣的錯誤我們可以使用下面的方式。也可以使用臨時變數作為const引用或者命名物件的初始式,例如,這樣的臨時變數在他的引用或者命名變數離開作用域時銷。毀。故臨時變數是一種匿名的區域性變數,返回區域性變數的引用是錯誤的。臨時變數不是左值變數,不能約束到非cosnt引用。

10.4.11 物件的放置

按照預設方式,new將在自由儲存中建立物件,且物件的位址有系統決定。如果我們想在其他地方放置物件可以使用帶引數的new運算子,其中的引數就是我們設定的放置物件的位址。釋放這種物件需要顯式地呼叫析構函式和free函式。由於不常用,這裡就輕描淡寫;用到時再詳細討論。

10.4.12 聯合

命名聯合的定義方式同struct,聯合的各個成員將具有想同的位址。聯合可以有成員函式(也就是個函式指標嘛),但卻不能有靜態成員。編譯器無法知道被使用的是聯合的哪個成員,也就是說,無法知道儲存在聯合的物件型別。因此聯合就不能包含帶有建構函式或析構函式的成員。因為聯合中物件的成員是共享同一位址,同一片記憶體。在聯合初始化時或聯合銷毀時不能得知聯合內部儲存的是哪個類的物件,該呼叫哪個類的建構函式或析構函式。

CSS基礎複習(續)

border 與 box 邊線,盒子模型 border屬性 用來設定元素的邊框 塊級元素有邊線 四邊設定 border width值 style 值 color值 單邊設定 border left width p,段落也是塊級 四邊設定 border p border 加冒號多粗 然後空格 虛線還是...

php基礎 快速複習記錄13 類與物件 續

php 5 可以使用型別約束。函式的引數可以指定必須為物件 在函式原型裡面指定類的名字 介面,陣列 php 5.1 起 或者 callable php 5.4 起 不過如果使用 null 作為引數的預設值,那麼在呼叫函式的時候依然可以使用 null 作為實參。如果乙個類或介面指定了型別約束,則其所有...

複習 類(包含)

01.02.程式的版權和版本宣告部分 05.檔名稱 test.cpp 06.作 者 劉芳 07.完成日期 201 3年12 月 13 日 08.版 本 號 v1.0 09.對任務及求解方法的描述部分 10.輸入描述 無 11.問題描述 12.程式輸出 輸出學生資訊 13.問題分析 略 14.演算法設...