變數(定義 初始化) 臨時變數

2021-10-06 08:54:37 字數 3071 閱讀 5348

宣告與定義

變數的宣告(如:extern int a;宣告外部變數)告訴編譯器變數名字與型別;

變數的定義:為變數分配儲存空間,此時也可以給定初始值;

函式的宣告:告訴編譯器有這麼乙個函式;

函式的定義:實現函式,簡言之就是帶有;

與結構體一樣,類只是一種複雜資料型別的宣告,不占用記憶體空間。

而物件是類這種資料型別的乙個變數,或者說是通過類這種資料型別定義了乙個變數(物件),是占用記憶體空間的。

calss point;

point t1; // 將呼叫建構函式

point *t1;// 不呼叫建構函式

宣告乙個指標 int *p;表示*p的型別為int,p是指向int型別的指標;(即p為int* ; *p為int)

定義 int *p 時,p位於棧區,占有記憶體空間是系統分配,系統將給定乙個隨機位址(不確定位址)給p;

void main_5()

二、臨時變數的產生

臨時變數只在呼叫期間有效,有三種方式產生:

函式返回時、型別轉換時、形式引數為const時;

1、函式返回時,以值或是指標形式返回時;

int sum(int a,int b)

2、在進行 強制型別轉換時;

double a = 10.5;

cout << (int)a ;// 在強轉時,一定生成臨時變數,原始資料本身並沒有改變。

cout << a;

3、函式形參為const來保護原始資料;

三、初始化

c++的初始化方式:預設初始化、值初始化、直接初始化、拷貝初始化、列表初始化;

預設初始化

1、未初始化的 全域性內建型別(int、double)變數;

2、類 型別,都會執行預設建構函式;如string、vector;

值初始化

值初始化是值使用了初始化器(即使用了圓括號或花括號)但卻沒有提供初始值的情況;

vectorv1(10);//10個元素,每個元素的初始化為0

vectorv2(10);//10個元素,每個元素都為空

vectorv4(10, 1);//v3有10個元素,每個的值都是1

vectorv3;//v2有1個元素,該元素的值是10

vectorv5;//v4有2個元素,值分別是10和1

int *p = new int();

直接初始化

直接初始化是指採用小括號()而不使用等號=的方式進行變數初始化;

string str1(10,'9');//直接初始化

string str2(str1);//直接初始化

拷貝初始化

使用等號(賦值號=)進行初始化,編譯器把等號右側的初始值拷貝到新建立的物件中去,拷貝初始化通常使用拷貝建構函式來完成。拷貝初始化看起來像是給變數賦值,實際上是執行了初始化操作,與先定義再賦值本質不同。

int a = 0;

int a = ;

string str1 = "hello";

string s=string("123456");

初始化列表

為c++11採用的初始化方式,使用{}進行初始化操作,下列三種情況需要用到初始化成員列表: 1、

類的資料成員中含有不帶預設建構函式的

物件(包括在繼承時顯示呼叫父類的建構函式對父類成員初始化);

2、類的資料成員中含有

const修飾型別

的或引用型別

;(因為這兩種物件要在宣告後馬上初始化);

3、子類初始化父類的私有成員;

vectorv4; // 等價於 v4 =  

int b[5]; // a = ;

class people// 列表初始化

private:

string name;

int age;

};

注意:初始化列表中變數的執行順序是由成員變數的宣告順序來決定的,上述並不先執行age(a),而是先執行name(n);

【舉例1】

class a ;

class b : public a ;

類物件的顯式初始化

data data1(2019,9,22);//顯式初始化,直接呼叫建構函式

data* b = new data(2019,9,22);//顯式初始化,直接呼叫建構函式,使用delete時析構

data p = data(2019,9,22);//顯式初始化,直接呼叫建構函式,沒有臨時物件,作用域結束時析構

data b(data1);//顯式初始化,呼叫拷貝建構函式,作用域結束時析構

類物件的隱式初始化

data b = a;//用乙個物件隱式初始化另一物件,呼叫拷貝建構函式,作用域結束時析構

c++11initialize_list類模板(初始化類模板#include

#include

#include

class mynumber

}void print()

}private:

std::vectormvec;

};

int main()

; // calls initializer_list

m.print();  // 1 2 3 4

mynumber m2; // calls initializer_list

m2.print();  // 10 20 30 40

return 0;

}

變數初始化

int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...

static成員變數定義初始化

static成員變數不僅可以通過靜態成員函式來改變其值,還可以通過建構函式改變其值。其中靜態的建構函式僅僅能夠改變靜態的成員變數,一般建構函式可以改變靜態成員變數或者其他成員變數。以下是建構函式可以改變靜態成員變數的值的 class atest static a int atest a 0 這裡不能...

變數定義 宣告 初始化

變數定義就是告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表,如下所示 type variable list 在這裡,type 必須是乙個有效的 c 資料型別,可以是 char w char int float double bo...