C++引用、類型轉換、類和對象(day03)

來源:互聯網
上載者:User

標籤:對象   接收   ...   rar   c++11   理念   角度   而不是   瞭解   

十 C++的引用(Reference)1 2 3 引用型函數參數1)將引用用於函數的參數,可以修改實參變數的值,同時也能減小函數調用的開銷。2)引用參數有可能意外修飾實參的值,如果不希望修改實參變數本身,可以將其定義為常引用,提高傳參效率的同時還可以接收常量型的實參。 4 引用型函數傳回值1)可以將函數傳回型別聲明為引用,避免函數傳回值所帶來的開銷。2)一個函數傳回型別被聲明為引用,那麼該函數傳回值可以是一個左值。3)為了避免在函數外部修改引用的目標,可以為該引用附加常屬性。eg:  int& foo(void){     static int a = 100;     return a;  }  int main(void)  {        foo() = 200;//ok  }註:不要返回局部變數的引用,因為所引用的目標記憶體會在函數返回以後被釋放,危險!但是可以返回成員變數、靜態變數、全域變數的引用//筆試題:引用和指標的區別...5 引用和指標1)從C語言角度,引用的本質就是指標,但是在C++中推薦使用引用而不是指標。eg:   double d = 3.14;   double& rd = d;   double* const pd = &d;   rd <=等價=>*pd2)指標定義可以不做初始化,其目標可以修改(指標常量除外),而引用必須做初始化,而且一旦初始化所引用的目標能再改變。eg:  int a=3,b=5;  int* p;//ok,可以不初始化  //int& r;//error  p = &a;  p = &b;  int& r = a;  r = b;//不是修改引用的目標,而是對r(a)進行賦值  //後面瞭解3)可以定義指標的指標(二級指標),但是不能定義引用的指標eg:  int a = 100;  int* p = &a;  int** pp = &p;    int& r = a;  int& * pr = &r;//error  int* pr = &r;//ok,是一個普通的指標4)可以定義指標的引用,但是不能定義引用的引用  eg:  int a = 100;  int* p = &a;  int* & rp = p;//ok,指標的引用  -----------  int& r = a;  int&& rr = r;//error,在C++11中稱為右值引用  int& r2 = r;//ok,不能稱為引用的引用,只是一個普通的引用,相當於給a再起一個別名。  5)可以指標數組,但是不能引用數組eg:  int a=1,b=2,c=3;  int* parr[3] = {&a,&b,&c};//指標數組  int& rarr[3] = {a,b,c};//error6)可以定義數組引用eg:  int arr[3] = {1,2,3};  //rarr稱為數組引用,給數組起一個別名  int (&rarr)[3] = arr;//ok  arr[0] <-等價-> rarr[0]7)和函數指標一樣,可以定義函數引用,文法和函數指標一致。eg:  void func(int a,int b){...}  int main(void){       //定義和使用函數指標       void (*pfunc)(int,int) = func;       pfunc(10,20);       //定義和使用函數引用       void (&rfunc)(int,int) = func;       rfunc(10,20);  }======================================十一 類型轉換1 隱式類型轉換eg:  char c = ‘A‘;  int n = c;//隱式類型轉換  -----------  void foo(int n){..}  foo(c);//隱式類型轉換  -----------  int foo(void){        char c = ‘A‘;        return c;//隱式類型轉換  }2 強制類型轉換eg:  char c = ‘A‘;  int n = (int)c;//C風格的強制轉換  int n = int(c);//C++風格的強制轉換3 C++增加了四種操作符形式的顯式類型轉換1)靜態類型轉換文法:   目標類型變數 =            static_cast<目標類型>(源類型變數);適用情境:   用於將void*轉換為其它類型指標。eg:    int a = 100;    void* pv = &a;//ok    int* pi = pv; //error    int* pi = static_cast<int*>(pv);//ok   2)動態類型轉換(後面講)文法:   目標類型變數 =            dynamic_cast<目標類型>(源類型變數);3)常類型轉換文法:   目標類型變數 =            const_cast<目標類型>(源類型變數);適用情境:用於去除一個指標或引用的常屬性eg:   int a = 100;   const int* pa = &a;   *pa = 200;//error   int* pa2 = const_cast<int*>(pa);   *pa2 = 200;//ok   -------------------   const int& r = a;   r = 300;//error   int& r2 = const_cast<int&>(r);   r2 = 300;//ok   4)重解釋類型轉換 文法:   目標類型變數 =         reinterpret_cast<目標類型>(源類型變數); 適用情境:   -->任意類型的指標或引用之間的轉換   -->在指標和整型數之間的轉換   eg:     int addr = 0x12345678;     int* p =          reinterpret_cast<int*>(0x12345678);     *p = 100;======================小結:1 慎用宏,用const、enum、inline替換#define PAI 3.14 --》const double PAI = 3.14 #define STATE_SLEEP 0#define STATE_RUN    1#define STATE_STOP  2--》enum STATE{SLEEP,RUN,STOP};#define max(a,b) ((a)>(b)?(a):(b))--> inline int max(int a,int b){        return a > b ? a : b;    }2 變數隨用隨聲明同時初始化3 盡量使用new/delete分配,取代malloc/free4 少用void*、指標計算、聯合體、強制轉換5 盡量使用string表示字串,少用C中的char*表示的字串====================================十二 類和對象//瞭解1 什麼是對象?  萬物皆對象,任何一種事物都可以看做是對象。 2 如何描述對象?  通過對象的屬性(名詞、數量詞、形容詞)和行為(動詞)描述和表達對象。 3 物件導向的程式設計  對自然世界中對象觀察引入到編程實踐的一種理念和方法。這種方法稱為"資料抽象",即在描述對象時把細節的東西剝離出去,只考慮一般性的,有規律性的和統一性的東西。 4 什麼是類?  類是將多個對象的共性提取出來定義的一種新的資料類型,是對 對象的屬性和行為的抽象描述。 

 

C++引用、類型轉換、類和對象(day03)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.