C++面向?qū)ο?/a>程序設(shè)計(jì)(三)——1.從C到C++

      網(wǎng)友投稿 988 2025-04-01

      本文目錄


      一 引用

      案例1.1

      案例1.2

      案例1.3 交換函數(shù)

      案例1.4 作為函數(shù)的返回值

      二 常引用

      案例2.1

      常引用與引用的轉(zhuǎn)換

      例題

      1.下面程序片段哪個(gè)沒錯(cuò)?

      2.下面程序片段輸出結(jié)果是什么?

      三 const關(guān)鍵字

      1.不可以通過常量指針修改其指向的內(nèi)容

      2.不能把常量指針賦給非常量指針,反過來是可以的

      3.函數(shù)的參數(shù)為常量指針時(shí),我們可以用來避免函數(shù)內(nèi)部不小心改變參數(shù)指針?biāo)傅胤降膬?nèi)容

      4.不能通過常引用修改其引用的變量

      例題

      四 new實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配

      1.分配一個(gè)變量

      案例4.1

      2.分配一個(gè)數(shù)組

      案例4.2

      五.用delete釋放動(dòng)態(tài)分配的內(nèi)存

      案例5.1

      案例5.2

      例題

      1.表達(dá)式 new int 的返回值類型是?

      2.下面哪個(gè)正確?

      六 內(nèi)聯(lián)函數(shù)

      七 函數(shù)重載

      八 缺省函數(shù)

      本文是中國大學(xué)MOOC,北京大學(xué)程序設(shè)計(jì)與算法(三)C++面向?qū)ο蟪绦蛟O(shè)計(jì)第一周筆記。

      一 引用

      引用的格式:類型名 & 引用名 = 某變量名

      int & r = n; // r 引用了 n, r 的類型是 int &

      1

      某個(gè)變量的引用,其實(shí)相當(dāng)于這個(gè)變量的另一個(gè)名字,二者是等價(jià)的

      案例1.1

      int n = 4; int & r = n; // r 與 n 等價(jià) r = 4; cout << r; //輸出 4 cout << n; // r 與 n 等價(jià),因?yàn)?r = 4, 所以 n = r = 4 n = 5; cout << r; // r 與 n 等價(jià),因?yàn)?n = 5, 所以 r = n = 5

      1

      2

      3

      4

      5

      6

      7

      所以只要等價(jià)的其中一個(gè)變化了,另一個(gè)也要變化

      值得注意的是:

      定義引用時(shí)要將其初始化成引用某個(gè)變量。就跟初始化變量時(shí)盡量賦值是一個(gè)道理

      初始化后,引用的就是這個(gè)變量,不會(huì)再引用別的變量了,從一而終

      引用只引用變量,不能引用常量和表達(dá)式

      案例1.2

      double a = 4, b = 5; double & r1 = a; double & r2 = r1; //r2 , r1 , a 這三者是等價(jià)的 r2 = 10; cout << a <

      1

      2

      3

      4

      5

      6

      7

      案例1.3 交換函數(shù)

      // C 語言 void swap( int * a, int * b) { int tmp; tmp = * a; * a = * b; * b = tmp; } int n1, n2; swap(& n1, & n2);

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      // C++ 語言 void swap( int & a, int & b) { int tmp; tmp = a; a = b; b = tmp; } int n1, n2; swap(n1, n2);

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      對(duì)比發(fā)現(xiàn) C++ 的引用更為方便

      案例1.4 作為函數(shù)的返回值

      int n = 4; int & SetValue(){ return n; } int main() { SetValue() = 40; cout << n; return 0; }//輸出40

      1

      2

      3

      4

      5

      6

      7

      8

      二 常引用

      在引用前加const即為常引用

      int n; const int & r = n; // r 的類型是 const int &

      1

      2

      值得注意的是:

      不能通過常引用去修改引用的內(nèi)容,要不然就不是常引用了

      案例2.1

      int n = 100; const int & r = n; r = 200; //編譯錯(cuò),n 可以改,r 不可以改 n = 300; //沒問題

      1

      2

      3

      4

      常引用與引用的轉(zhuǎn)換

      const T & 和 T &是不同的類型

      T &類型的引用或T類型的變量可以用來初始化const T &類型的引用

      const T類型的常變量和const T &類型的不能用來初始化T &類型的引用,除非使用強(qiáng)制轉(zhuǎn)換

      例題

      A. int n = 4; int & r =n * 5; //引用不可以出現(xiàn) n * 5

      B. int n = 6; const int & r = n; r = 7; //常引用不可以出現(xiàn)r = 7,不能通過常引用去修改引用的內(nèi)容,要不然就不是常引用了

      C. int n = 8; const int & r1 = n; int & r2 = r1 //常引用不可以出現(xiàn)int & r2 = r1,const T類型的常變量和const T &類型的不能用來初始化T &類型的引用,除非使用強(qiáng)制轉(zhuǎn)換

      D. int n = 8; int & r1 = n; const int r2 =r1;

      int a = 1,b = 2; int & r = a; //r 與 a 等價(jià) r = b; r = 7; cout << a <

      1

      2

      3

      4

      5

      三 const關(guān)鍵字

      #define類似于文檔的全部替換,不會(huì)考慮上下文的意思。在C++中,推薦使用const

      const int MAX_VAL = 23;

      const string SCHOOL_NAME = “Peking University”

      值得注意的是:

      1.不可以通過常量指針修改其指向的內(nèi)容

      int n, m; const int * p = & n; * p = 5; //編譯出錯(cuò) n = 4; //ok p = & m; //ok

      1

      2

      3

      4

      5

      2.不能把常量指針賦給非常量指針,反過來是可以的

      const int * p1; int * p2; p1 = p2; //ok p2 = p1; //error p2 = (int * ) p1; //ok,強(qiáng)轉(zhuǎn)

      1

      2

      3

      4

      5

      3.函數(shù)的參數(shù)為常量指針時(shí),我們可以用來避免函數(shù)內(nèi)部不小心改變參數(shù)指針?biāo)傅胤降膬?nèi)容

      void MyPrintf( const char * p) { strcpy(p,"this"); //編譯出錯(cuò) printf("%s",p); //ok }

      1

      2

      3

      4

      5

      4.不能通過常引用修改其引用的變量

      int n; const int & r = n; r = 5; //error n = 4; //ok

      1

      2

      3

      4

      例題

      1.下面說法哪種是對(duì)的?

      A.常引用所引用的變量,其值不能被修改

      B.不能通過修改常量指針。去修改其指向的變量 //正確

      C.常量指針一旦指向某個(gè)變量,就不能再指向其他變量

      四 new實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配

      C++面向?qū)ο蟪绦蛟O(shè)計(jì)(三)——1.從C到C++

      1.分配一個(gè)變量

      P = new T; //T 是任意類型名,P 是類型為 T * 的指針

      1

      該語句動(dòng)態(tài)分配處一片大小為sizeof(T)字節(jié)的內(nèi)存空間,并將該空間的起始地址賦值給P

      int * pn; pn = new int; * pn = 5;

      1

      2

      3

      2.分配一個(gè)數(shù)組

      P = new T[N]; //T 為任意類型名;P 為類型為 T * 的指針;N 要分配到數(shù)組元素的個(gè)數(shù),可以是整型表達(dá)式

      1

      該語句動(dòng)態(tài)分配處一片大小為sizeof(T) * N字節(jié)的內(nèi)存空間,并將該空間的起始地址賦值給P

      int * pn; int i = 5; pn = new int[i * 20]; pn[0] = 20; pn[100] = 30; //數(shù)組越界

      1

      2

      3

      4

      5

      五.用delete釋放動(dòng)態(tài)分配的內(nèi)存

      用了new動(dòng)態(tài)分配一定要用delete釋放

      案例5.1

      int * p = new int; * p = 5; delete p; delete p; //異常,一個(gè)new只能delete一次

      1

      2

      3

      4

      案例5.2

      //delete動(dòng)態(tài)分配的數(shù)組 int * p = new int[20]; p[0] = 1; delete [] p;

      1

      2

      3

      4

      例題

      A int

      B int * //正確

      C int &

      A char * p = new int; p = ’ a ’ ; delete p ;

      B int * p =new int [25]; p[10] = 100; delete p;

      C char * p = new char[10]; p[0] = ‘K’; delete [] p; //正確

      六 內(nèi)聯(lián)函數(shù)

      inline int Max(int a, int b) { if( a > b) return a; return b; }

      1

      2

      3

      4

      5

      七 函數(shù)重載

      一個(gè)或多個(gè)函數(shù),名字相同,然而參數(shù)個(gè)數(shù)或參數(shù)類型不相同

      例如:

      int Max(double f1, double f2){} //Max(3.4, 2.5) int Max(int n1, int n2){} //Max(2,4) int Max(int n1, int n2,int n3){} //Max(1,2,3)

      1

      2

      3

      八 缺省函數(shù)

      定義函數(shù)時(shí),最右邊的連續(xù)若干個(gè)參數(shù)有缺省值,那么在調(diào)用時(shí)候,如果那些位置不寫參數(shù),參數(shù)就是缺省值

      void func(int x1, int x2 = 2, int x3 = 3){} func(10); //等效于func(10,2,3) func(10, 8); //等效于func(10,8,3) func(10, , 8); //錯(cuò)誤,只能最右邊連續(xù)若干個(gè)缺省

      1

      2

      3

      4

      C++ 面向?qū)ο缶幊?/p>

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:wps表格如何縮印(wps表格如何縮印到一張紙)
      下一篇:簡(jiǎn)單入門計(jì)算機(jī)網(wǎng)絡(luò)
      相關(guān)文章
      亚洲熟妇中文字幕五十中出| 含羞草国产亚洲精品岁国产精品 | 亚洲av无码专区在线播放| 久久精品国产亚洲av品善| 亚洲人成在线精品| 91在线精品亚洲一区二区| 亚洲日本中文字幕| 亚洲av网址在线观看| 亚洲AV无码专区国产乱码电影 | 亚洲一区爱区精品无码| 亚洲日本韩国在线| 亚洲综合另类小说色区色噜噜| 亚洲第一页综合图片自拍| 亚洲福利精品一区二区三区 | 精品日韩亚洲AV无码 | 亚洲AⅤ永久无码精品AA| 国产亚洲福利一区二区免费看| 亚洲人成在线播放网站| 国产成人精品日本亚洲专区61| 亚洲午夜精品一级在线播放放| 亚洲熟伦熟女新五十路熟妇| 国产偷窥女洗浴在线观看亚洲| 国产偷国产偷亚洲清高动态图| 亚洲日韩激情无码一区| 久久亚洲国产中v天仙www| 久久久影院亚洲精品| 亚洲黑人嫩小videos| 亚洲福利电影一区二区?| 亚洲中文无码av永久| 亚洲永久网址在线观看| 亚洲AV成人一区二区三区观看| 亚洲国产日产无码精品| 亚洲av丰满熟妇在线播放| 亚洲一区二区在线视频| 亚洲精品中文字幕乱码| 香蕉大伊亚洲人在线观看| 色婷婷六月亚洲综合香蕉| 亚洲精品国产日韩无码AV永久免费网 | 久久精品亚洲综合专区| 亚洲网站视频在线观看| 久久亚洲精品专区蓝色区|