C Primer Rush 2 3 復合型別

2021-09-05 11:41:01 字數 1539 閱讀 2014

復合型別compound type)是指基於其他型別定義的型別。c++語言有幾種復合型別,本章將介紹其中的兩種:引用和指標。

2.3.1 引用

引用reference)為物件起了另外乙個名字,引用型別引用(refers to)另外一種型別。通過將宣告符寫成&d的形式來定義引用型別,其中d是宣告的變數名:

int ival = 1024;

int &refval = ival; //refval指向ival(是ival的另乙個名字)

int &refval2; //報錯:引用必須被初始化

一般在初始化變數時,初始值會被拷貝到新建的物件中。然而定義引用時,程式把引用和它的初始值繫結bind)在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和它的初始值物件一直繫結在一起。因為無法令引用重新繫結到另外乙個物件,因此引用必須初始化。

引用即別名:引用並非物件,相反的,它只是為乙個已經存在的物件所起的另外乙個名字。

定義了乙個引用之後,對其進行的所有操作都是在與之繫結的物件上進行的:

refval = 2;        //把2賦給refval指向的物件,此處即是賦給了ival

int ii = refval //與ii = ival 執行結果一樣

2.3.1 指標

指標pointer)是「指向(point to)」另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。然而也有很多不同點。其一,指標本身就是乙個物件,允許對指標賦值和拷貝,而且在指標的生命週期內它可以先後指向幾個不同的物件。其二,指標不需要在定義時賦初值。和其他內建型別一樣,在塊作用域內定義的指標如果沒有被初始化,也將擁有乙個不確定的值。

定義指標型別的方法是將宣告符寫成 *d 的形式,其中 d 是變數名。如果在一條語句中定義了幾個指標變數,每個變數前面都必須有符號 * 。

int *ip1, *ip2;     //ip1和ip2都是指向int型物件的指標

double dp, *dp2; //dp2是指向double型物件的指標,dp是double型物件

int ival = 42;

int *p = &ival; //p存放變數ival的位址,或者說p是指向變數ival的指標

如果指標指向了乙個物件,則允許使用解引用符(操作符*)來訪問該物件:

int ival = 42;

int *p = &ival; //p存放著變數ival的位址,或者說p是指向變數ival的指標

cout << *p; //由符號*得到指標p所指的物件,輸出42

2 3復合型別 指標

指標是 指向 另外一種型別的復合型別。與引用類似,指標也實現了對其他物件的間接訪問。但兩者有很多不同 1.指標本身是乙個物件,允許對指標複製和拷貝,而且在指標的生命週期內它可以先後指向幾個不同的物件 2.指標無須在定義時賦初值和其他內建型別一樣,在塊作用域內定義的指標如果沒有初始化,也將有乙個不確定...

第2章 2 3復合型別

2.3.2 指標 2.3.3 理解符合型別的宣告 復合型別是指基於其他型別定義的型別。c 有幾種符合型別,其中兩種為 引用 指標。2.3.1 引用 引用為物件起了另外乙個名字,引用型別引用另外一種型別。通過將宣告符寫成 d 的形式來定義引用型別,其中 d 是宣告的變數名 int a 1024 int...

購物車(復合類)

商品類包含私有資料成員 商品編號 名稱 顏色 尺碼 單價 數量。購物車類包含私有資料成員 商品物件集合 商品總數 購物車所有商品總價。購物車操作分別有add delete up down表示,具體格式描述如下 add 商品編號 商品名稱 顏色 尺碼 單價 數量 新增1個或多個同類商品,若購物車已有指...