1. 程式人生 > >C++知識點複習(一)

C++知識點複習(一)

      千里之行始於足下,打牢基礎是非常重要的,在對c和c++的知識學習了一段時間後,有些知識點的概念和特性也

不大熟悉了,所以自己準備將C++的知識點從頭到尾仔細的複習一遍,理一理:

(1)C++的三大特點:

       a.   封裝:封裝可以隱藏實現細節,使得程式碼模組化。封裝是把過程和資料包圍起來,對資料的訪問只能通過已

義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通

過一個受保護的介面訪問其他物件。在面向物件程式設計上可理解為:把客觀事物封裝成抽象的類,並且類可以把自己的

資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

      b.    繼承:繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些

能進行擴充套件。其繼承的過程,就是從一般到特殊的過程。通過繼承建立的新類稱為“子類”或“派生類”。被繼承的類

稱為“基類”、“父類”或“超類”。要實現繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實現。在某些

 OOP 語言中,一個子類可以繼承多個基類。但是一般情況下,一個子類只能有一個基類,要實現多重繼承,可以通

過多級繼承來實現。

      c.    多型:多型性(polymorphisn)是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之

後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的

指標賦值給父類型別的指標。

(2)繼承的實現方式:

      a.    實現繼承:指使用基類的屬性和方法而無需額外編碼的能力;

      b.    介面繼承:指僅使用屬性和方法的名稱、但是子類必須提供實現的能力;

      c.    可視繼承:指子窗體(類)使用基窗體(類)的外觀和實現程式碼的能力;

(3)建構函式:  

      名字和類名相同,沒有返回值,也不需要顯式呼叫,在建立物件的時候自動執行,專門用來初始化物件的;

(4)訪問許可權:

      在類的內部,無論public,protect,private都可以互相訪問,沒有限制;在類的外部,只能是通過物件訪問public

的成員,不能訪問private,protected成員;通過類的內部public的函式訪問private;

(5)解構函式:

      創造物件時用建構函式初始化;退出的時候用解構函式來退出,進行清理工作;釋放分配的記憶體,關閉開啟的文

件。Demo()----構造,~Demo()----解構函式  ;建構函式可以過載,解構函式只能一個,不能過載,析構沒有參

數;

(6)const:

      a. 在c++中和#define的作用差不多,在c中修飾的變數不允許改變,但是可以通過指標修改該單元內容,輸出的時

候是修改後的內容;在c++中,雖然通過指標修改,但是輸出仍然是原來的內容,輸出不到記憶體取值;

      b. c++中const的變數只能在本檔案中可用,別的檔案報錯,而c沒有這種限制;

(7)static:

     a.  修飾區域性變數:靜態區域性變數,執行完釋放,初始化一次,

     b.  修飾全域性變數:只能在本檔案中使用;

     c.  修飾函式:只能在本檔案使用

(8)this指標:

      指向當前物件,通過它可以訪問當前物件的所有成員。當前物件就是正在使用的物件;在類的內部使用,可以訪

問所有的成員,public,private,protect。this只能在非靜態成員函式內部使用,在其他地方非法;this 只能在物件創

建以後才能使用,否則非法;

(9)static成員變數:

      static變數屬於類,只能在類外部初始化;static變數是幾個物件共享使用,相當於全域性變數;

      外部初始化的格式:

           int Student::m_total = 0;

           型別   類名::static變數 = 數值;

      static 成員的訪問形式:

           a. 類名::static變數   :   Student::m_total

           b. 物件.(static 變數)  :   stu.m_total

           c. 物件指標->(static成員變數) : pstr->m_total

(10)static函式:

沒有this指標,只能訪問static成員;

        static函式宣告時加static,定義的時候不加;

(11)const成員函式:

可以使用所有的成員,但是不能改變值,宣告和定義函式時都要加const;

        const物件只能呼叫類的const成員 ;

(12)友元函式friend:

       在類外定義的,不屬於當前類的函式,可以在當前類中宣告,前面加friend,構成友元函式;

 class Address
 {
  public:
        friend class Student;
  };
      

       友員函式可以訪問當前類的private成員;

       友元函式不能直接訪問類的成員,必須藉助物件;

       友員的關係是單向的,不是雙向的;

       友員關係不能傳遞:B是A的友員,C是B 友員, C和A之間不是友員關係;

(13)string類:

        a.  包含標頭檔案 <string>

             string s1;      定義的時候沒有初始化,預設是空;

             string s2 = "c  plus";   定義並初始化 c plus ,沒有‘\0’;

             string s3 = s2;    定義s3,並把s2賦值給s3;

             string  s4  (3, 's'); 初始化為3個s;

             string 輸入時,cin是遇到空格預設結束;

             string成員可以用下標訪問;從0開始;
  
        b.  string 中字串可以使用+, +=進行字串的拼接;

        c.  string插入操作,insert

           原型:  string& insert(size_t pos, const string &str)
  
        d.  string刪除操作:erase

           原型:string& erase(size_t pos = 0, size_t length)

           s2.erase(5);把s2第5個元素後面的內容全部刪除;

           s3.erase(5, 3);s3中第5個後面3個元素刪除
  
        e.  string中substr

          string substr (size_t pos = 0, size_t len = npos) const;

          pos 為要提取的子字串的起始下標,len 為要提取的子字串的長度。

          s2 = s1.substr(3, 10);從第3個開始提取10給s2;
  
        f.  string查詢find查找出現的位置:

          其中的兩種原型為:

          size_t find (const string& str, size_t pos = 0) const;

          size_t find (const char* s, size_t pos = 0) const;
  

(14)繼承的方式:

        a.  public繼承:

            基類中public成員在派生類中還是public屬性;

            基類中protected成員在派生類中protected屬性;

            基類中private在派生類中不能使用;
   
        b.  protected繼承

            基類中public成員在派生類中為protected屬性;

            基類中protected成員在派生類中為protected屬性;

            基類中private在派生類中不能使用;


        c.  private繼承

            基類中public成員在派生類中為private屬性;

            基類中protected成員在派生類中為private屬性;

           基類中private在派生類中不能使用;
   
           在派生類中訪問基類的private成員的唯一方法就是藉助基類的非private成員函式,如果沒有這樣的成員函式則

無法訪問;

(15)改變訪問許可權using:

        使用using改變基類成員在派生類中的訪問許可權;

        如: public改成private,

        存在問題: 在派生類中無法訪問基類中private成員,如何用using修改,編譯的時候報錯;