目錄
第二部分 c++核心程式設計一
1,記憶體分割槽模型
1.1程式執行前
1.2程式執行後
1.2new操作符
2.引用
2.1引用的基本使用
2.2注意事項
2.3引用做函式引數
2.4引用做函式返回值
2.5引用的本質
2.6常量引用
3,函式的提高
3.1函式的預設引數
3.2函式佔位引數
3.3函式過載
c++在程式執行時,將記憶體大方向劃分為4個區域
劃分的意義:不同區域存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計
未執行該程式前分為兩部分
**區:
存放cpu執行的機器指令
**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可(.exe檔案每次執行都是這一段**)
**區是唯讀的,使其唯讀的原因是防止程式意外地修改了他的指令 (.exe檔案不能被修改)
全域性區:
全域性變數和靜態變數存放在此
全域性區還包括了常量區,字串常量和其它變數也存放在此(常量區包括:const修飾的全域性常量和字串常量)
該區域的資料在程式結束後由作業系統釋放(只要是區域性定義的都不在全域性區,不論是字串還是字元)
棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數等
int *ap(int a)此時不論返回a的位址還是b的位址,都會出錯,因為形參也是區域性變數,所以當這個函式執行過後,都會被自動釋放。
堆區:由程式設計師分配釋放,如果程式設計師不釋放,則程式結束時由作業系統**#include#includeusing namespace std;
int b = 1;
int *ap()
int *aq()
int main()
在c++中主要利用new在堆區開闢記憶體
指標本質上也是區域性變數,放在棧上,指標儲存的資料是放在堆區
int *ap()c++中利用new操作符在堆區開闢資料
堆區開闢的資料,由程式設計師手動開始,手動釋放,釋放利用操作符delete
語法:new 資料型別
利用new建立的資料,會返回該資料對應的型別的指標
int *p = new int(10); //堆區開闢乙個資料語法:資料型別 &別名=原名delete p; //釋放該資料
int *q = new int[10]; //堆區開闢乙個陣列
delete q; //釋放該陣列
int a = 10;int &b = a;
int a = 10, aa = 20;作用:函式傳參時,可以利用引用的技術讓形參修飾實參int &b = a;
int &c; //錯誤,引用必須初始化
&b = aa;//錯誤,初始化後,不可改變
b = aa;//賦值操作
void swap(int &a, int &b) //引用傳遞交換兩數的值
作用:引用是可以作為函式的返回值存在的#include#includeusing namespace std;
void swap(int &a, int &b)
int main()
用法:函式呼叫作為左值
int &test1()特殊賦值方法,因為函式返回的是乙個引用,所以仍然可以賦值:eg:test2() = 111;int &test2()
引用的本質在c++內部實現是乙個指標常量
int &a = b; //轉換為 int *const a=&b;作用:常量引用主要用來修飾形參,防止誤操作a = 10; //轉換為 *a=10;
在函式形參列表中,可以用const修飾形參,防止形參改變實參
const int &a = 10; //轉換為int b=10; const int &a=b;const使用場景,在當作形參時使用,防止資料被誤操作
void show(const int &a)
在c++中,函式的形參列表中的形參可以是有預設值的#include#includeusing namespace std;
void show(const int &a)
int main()
語法:返回值型別 函式名(引數=預設值){}
int test(int a = 1, int b = 2, int c = 3)
注1:如果某個位置已經有了預設值,那麼從這個位置往後,從左到右都必須有預設值int test(int a = 1, int b, int c) //錯誤
注2:如果函式宣告有預設引數,函式實現就不能有預設引數『(宣告和實現只能有乙個預設引數)c++中函式的形參列表裡可以有佔位引數,用來佔位,呼叫函式時必須填補該位置int test(int a = 1, int b = 2, int c = 3);
int test(int a = 1, int b = 2, int c = 3) //錯誤,宣告時,函式已經有引數了,所以實現不能有引數
語法:返回值型別 函式名(資料型別){}
void test1(int a, int)作用:函式名可以相同,提高復用率
滿足條件:
返回值型別不可以作為函式過載的條件
函式過載的注意事項
void test(int &a)void test(const int &a) //這兩個可以構成過載
void test(int a)void test(int a, int b = 10) //因為包含預設引數,所以不能構成過載
Web API 第二部分
web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...
redux 第二部分
redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...
實驗二 第二部分
第二部分 ftp協議分析 1.兩個同學一組,a和b。2.在a主機上架設ftp伺服器 3.在b主機上執行wireshark,並登陸a主機的ftp伺服器,上傳一張,得到抓取的資料報,4.進行追蹤tcp流,顯示為原始資料,分析得到a主機登陸ftp的過程及使用者名稱密碼,還原上傳的,第二部分 ftp協議分析...