型別是所有程式的基礎;
C++ 定義了幾種基本型別: 字元型(char 和 wchar_t),整型(short int long bool),浮點型(float doubel) 並且提供自定義資料型別的機制 class struct ;;
標準庫正是採用了這些機制 才定義了許多更為複雜的資料型別如: 可變長字串 string vector 等;
物件 就是記憶體中具有型別的區域;具體點說:計算左值表示式就會產生物件 ;
-------- 關於初始化
初始化 分為 複製初始化 與 直接初始化
複製初始化語法使用等於(=) ,直接初始化則是把初始化式放在括號中;;
int value(1024) ; // 直接初始化
int value = 1024 ; // 複製初始化
C++ 中 “初始化 不是 賦值” 初始化是指建立變數 並且 給它 賦初始值, 而賦值是指擦除物件的當前值並用新的值代替;// 故 複製初始化實際上是兩步動作,直接初始化語法更加靈活效率更高;
對於內建型別來說,賦值初始化 與 直接初始化、並沒有太大的差別
但對於 類型別的物件來說,有些初始化僅能用直接初始化來完成; 定義如何進行初始化的成員函式稱為 建構函式, 一個類可以定義多個建構函式,每一個建構函式必須接受不同數目或者不同型別的引數;
------- 變數初始化的規則:
1.內建型別變數的初始化
內建型別變數是否自動初始化取決與變數定義的位置;
在函式體外 定義的變數都 初始化為 0
在函式體內 定義的變數 不進行自動初始化;
2.類型別變數的初始化
使用顯式的初始化式
使用預設的建構函式
不管變數在哪定義,預設函式都會被使用;有些類型別沒有預設建構函式,對於這些 型別來說,每個定義都必須提供顯式的初始化式; 沒有初始值是根本不可能定義這種型別的變數的;
------ ---- 宣告 與 定義
變數的定義用於為變數分配儲存空間, 還可以為變數指定初始值,但是變數有且僅有一個定義;(定義一般伴隨著 初始化式)
宣告 用於向程式表明變數的型別 和 名字。定義也是一種宣告 (使用extern 但是並沒有 初始化式)
extern int pi = 3.1415 ; // 定義
extern int pi ; // 宣告 但並沒有定義;
---------- const 限定符 ;
const 限定符 提供將一個變數轉化為常量的辦法; // 用const 修飾 即表明 不可被修改;
預設情況:
在全域性作用域裡定義非const變數時,它在整個程式中都可以被訪問;
全域性作用域中宣告的const變數 是定義該物件檔案的區域性變數,此變數只存在這個檔案中,不能被其他檔案訪問
// 預設情況下 類似與 c語言 static 的作用域;
*非const 變數 預設是extern , 想要在其他檔案中訪問cosnt 常量 必須 顯式的指定為 extern ;
------------ 引用 ;
引用就是物件另一個名字;引用主要是 用作函式的形式引數 在前面新增 &符號來定義;
*** 引用 必須用與該引用同型別的物件初始化; int val = 1025 ; int &var = val ; // OK
引用僅僅是名字的不同,但是指向同一個地址,同一個物件; 同資料型別的物件相互關聯;
----------- typedef
用來定義型別的同義詞; typedef int qint32 ; // 使用qint32 來代表int資料型別;
----------- 列舉; enum
為某些屬性定義一組可選擇的值;
預設:第一個列舉成員 賦值為0, 後面的每一個列舉都比前面的大1;
enum stat { input , output , append } ; // 預設 input = 0 ; output = 1 ; append = 2 ;
// enum stat { input =2 , output , append } ; // 其他成員將 隱式初始化 ;
-------- struct 與 calss
class 第一個訪問標識 前面 所有的成員 都是 private:
struct 第一個標識前面 都有的成員都是 public ; // 這是 class 與 struc 唯一差別;