C++Primer 變量和基本類型

1.通常存儲器中一個字節爲8位,一個字word爲32位。每一個字節和一個地址關聯。

2.C++只規定了每一種算數類型的最小存儲空間,但並不阻止編譯器使用更大的存儲空間。

(1)整型分三種:

  字符類型 char:單個機器字節byte-8bit

  整數類型:默認爲帶符號的signed,unsigned默認爲unsigned int。無符號型若爲8位,則取值範圍是0到255。若爲符號型,則取值範圍爲-128到127。其中10000000表示-128,00000000表示0。如果賦值超過取值範圍,編譯器會取該值對256求模後的值。

           int:單個機器字長word-32bit(最小存儲空間爲16bit)

           short:半個機器字長-16bit(最小存儲空間爲16bit)

           long:單個機器字長-32bit(最小存儲空間爲32bit)

  布爾類型:表示真值true或者false。可以把算數類型的任何值賦給bool對象。0值算數類型代表false,任何非0的都代表true。

 (2)浮點型

  單精度浮點型 float:32bit表示,只能保證6位有效數字。

  雙精度浮點型 double:64bit表示,可以表示10位有效數字。


3.字面值常量:只能用它的值稱呼他,而且值不能修改。

(1)只有內置類型存在字面值,沒有類類型的字面值,因此不會有標準庫類型的字面值。

(2)字符串字面值:自動在末尾添加一個空字符。因此字符字面值'A'和字符串字面值"A"是不同的。


4.變量:提供了程序可操作的有名字的存儲區。

(1)每一個變量,或者稱爲對象,都有特定的類型,該類型決定了變量的內存大小和佈局,能夠存儲於該內存中的值的取值範圍以及可應用在該變量上的操作集。

(2)變量不能稱爲右值,只能是賦值語句的左值。字面值不能稱爲賦值的左值,只能是右值。


5.對象:內存中具有類型的區域。跟數據的類型,有無名字,可讀可寫無關。

(1)定義對象:定義對象,即指定與對象相關聯的類型,決定分配給對象的存儲空間和操作。

(2)初始化:初始化不是賦值。可以直接初始化(用括號),可以複製初始化(用等號)。對類類型初始化時,需要用到特殊的成員函數,稱爲構造函數。當沒有提供初始化式時,程序自動調用默認構造函數進行初始化。而如果內置類型變量沒有初始化,函數體外定義的變量自動初始化爲0,而函數體內的不進行自動初始化,會成爲未定義行爲。


6.聲明與定義:extern聲明不是定義,也不分配存儲空間。變量可以聲明多次,但只能定義一次。當extern聲明位於函數外部時,纔可以含有初始化式,這個聲明語句被當做是定義,即使含有聲明標記。

extern int i;
許多文件中使用的變量需要有與定義分離的聲明。

7.名字的作用域scope:在for循環中定義的變量,不能在main函數其他地方使用,具有語句作用域。

8.const限定符:把一個對象轉變爲一個常量。雖然該變量仍然是一個左值,但不可修改,而且在定義後必須初始化。通常在全局作用域聲明的const變量是定義在該文件內的局部變量。若要全局所有文件都可以訪問,則需要聲明extern。

const int bufSize = 512;

9.引用:引用只是對象的另一個名字。必須初始化爲相同類型的一個對象。

int ival = 1024;
int &refVal = ival;

const引用:是指向const對象的引用。可以初始化爲右值。而且可以綁定到不同但相關的類型的對象上。

int i = 2;
const int &r = 42;
const int &r2 = r+i;
double dval = 3.14;
const int &ri = dval;

10.typedef名字:給了數據類型另一個名字。

typedef double wages;
typedef int scores;
typedef wages salary;

11.枚舉:爲某些屬性定義一組可選擇的值。

enum open_modes{input, output, append}

(1)定義和初始化:open_modes是枚舉類型名,input等是枚舉成員。默認的第一個枚舉成員賦值爲0,後面的每個枚舉成員賦值比前面的大1。

(2)枚舉成員是常量,且成員值可以是不唯一的。

enum Points { point2d = 2, point2w,
                       point3d = 3, point3w};

(3)每個enum都定義一種唯一的類型。可以用一個枚舉成員去賦值,也可以用一個對象去賦值。用一個枚舉成員賦值很好理解,就是指這個枚舉對象目前存在它可選狀態中的哪個。用另一個枚舉對象去賦值表示他們具有相同的可選狀態。

Points pt3d = point3d; // point3d is a Points enumerator
pt2w = pt3d;//both are objects of Points enum type

12.類類型:每個類都定義了一個接口和一個實現。

接口表示該類需要執行的操作,實現表示該類所需要的數據。

(1)定義類:類體可以是空。操作和數據時類的成員。操作稱爲成員函數,數據稱爲數據成員。類可以包含0個到多個private或public的訪問標號。定義了類就定義了一種新的類型,程序就可以定義該類型的變量。

class Sales_item{
public:
    // operation on Sales_item objects will go here
private:
    std::string isbn;
    unsigned units_sold;
    double revenue;
};

(2)定義變量和數據成員的區別:只能指定數據成員的名字和類型,不能在定義時初始化,需要用構造函數來給類進行初始化。

(3)public和private區別:不是類的組成部分的代碼不能訪問private成員。

(4)struct和class的區別:struct默認爲public,class默認爲private。


13.頭文件:

(1)頭文件一般包含:類的定義,extern變量的聲明和函數的聲明。

(2)頭文件用於聲明而不是定義。類,const對象和inline函數例外。const對象可以定義在頭文件中,是因爲它的作用域只在一個文件,因此不會出現重複定義的問題。只要在需要使用時包含頭文件即可。

(3)頭文件經常需要其他頭文件,會造成多重包含,導致一些類和對象多次被定義,因此使用預處理器變量定義頭文件保護符來避免這種情況。

#ifndef SALESITEM_H
#define SALESITEM_H
// definition of Sales_item class and functions goes here
#endif


測試SALESITEM_H是否未定義。每個文件的預處理器變量不能重名。

(4)#include的方式區別:

<>認爲頭文件是標準頭文件,編譯器毀在預定的位置查找頭文件,若是" "則會到源文件所在的路徑去查找頭文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章