c++基本概念

1. 類的聲明與對象的定義

    常用的方法是類的聲明與對象的定義分開

2.成員訪問限定符private,public,protected的含義

   private:只能被類的成員函數訪問,類外不能被訪問(友元除外)

   public:可以被類的成員函數訪問,也可以被類的作用域內的其它函數訪問

   protected:在類外不能被訪問,但可以被派生類的成員函數訪問。

3.成員函數:可以訪問本類的任何成員(包括私有和公有的),可以引用在本作用域有效的數據

  注意:它的權限(能否被調用),作用域(能使用什麼範圍內的數據和函數)

  一般做法:需要被外界調用的函數聲明爲pblic作爲類的對外接口,並非所有的成員函數都指定爲public,不是準備爲外界調用,而是爲本類的成員函數調用,就應該將它們指定爲private

成員函數的存儲方式:

    類定義對象時,系統會爲每個對象分配存儲空間。如果對象包含數據和成員函數,就要分別爲數據和成員函數分配存儲空間。一般情況下,不同類型的數據分配的存儲空間是不同的,而不同對象的函數代碼是相同的。如果爲每個對象的函數分配存儲空間,就會浪費許多存儲空間。於是就用一段空間來存儲這個共同的函數代碼段,在調用各對象的函數時,都去調用這個公用的函數代碼。在這種情況下,每個類的對象的存儲空間只是該對象的數據部分的存儲空間,不包括函數代碼所佔的存儲空間。函數代碼是存儲在對象空間之外的。於是就產生一個問題:雖然不同的對象調用成員函數都執行同一段代碼,但其執行結果一般是不同的。這是爲什麼?因爲c+設立了一個this指針,用來指向不同的對象

 

成員函數的inline聲明的作用:在調用該函數時,將函數的代碼段插入到調用點。若不用inline聲明,則調用該函數時,流程就會轉到函數代碼段的入口地址,在執行完函數代碼時,返回調用點

 

 

4.公用接口與私有實現分離

   類的作用:把數據和算法封裝在用戶聲明的抽象數據類型。在類的聲明中,一般把所有的數據成員指定爲私有的,使它們與外界隔離。把需要讓外界調用的成員函數指定爲pulic,外界通過公用的函數實現對數據的操作。外界與對象唯一的聯繫渠道就是通過調用公用函數。因此,公有成員函數也稱爲用戶使用類的公用接口,即類對外的接口。不一定要把所有的成員函數聲明爲pulic,那麼這些函數就不是公用接口。用戶只關心功能,而不關心實現,這樣就實現了接口和實現的分離。通過成員函數對數據操作稱爲類的實現。爲了防止用戶任意修改公有成員函數,實現的細節對用戶是隱蔽的,即私有實

 

5.類庫:分爲C++標準庫和用戶自定義的庫,方便編譯

  類庫包含2個組成部分:類聲明頭文件,已經過編譯的成員函數的定義(目標文件)。用戶只需將類庫裝入計算機系統中,然後包含要使用的頭文件,即可使用這些類和成員函數。類聲明頭文件就成爲用戶使用類的公用接口,在頭文件的類體中還可以看到成員函數的聲明。包含成員函數的文件就是類的實現。

 

接口和實現分離,爲軟件開發商向用戶提供類庫創造了很好的條件。開發商把用戶所需的各種類的聲明放在不同的頭文件中,同時把對包含成員函數的定義的源文件進行編譯,得到函數定義的目標代碼。然後向用戶提供類的聲明的頭文件和成員函數定義的目標代碼(不提供函數定義的源代碼)

 

6.構造函數(constructor)和析構函數(destructor)

 

  在類對象進入其作用域時就會調用構造函數。構造函數沒有返回值,函數名與類名相同,其作用是對對象進行初始化。構造函數是定義對象時系統自動調用的,且只執行一次。構造函數一般聲明爲pulic.構造函數不能被顯示的調用

如果用戶沒有定義構造函數,那麼C++系統會自動生成一個構造函數。只是這個構造函數的函數體爲空,沒有參數,不執行初始化操作。

 

帶參數的構造函數: 參數的初始化表

如box(int len,int w,int h ):length(len),height(h),width(w){}//len初始化成員變量length......

構造函數重載:

默認構造函數:不帶實參的構造函數。一個類只能有一個默認構造函數

 

析構函數:當對象的生命期結束時,會自動調用析構函數。如~box()。析構函數不能被重載,一個類只能有一個析構函數。其作用不是刪除對象,而是在撤銷對象佔用的內存之前完成清理工。

 

執行析構函數的具體情況:

   1.在函數中定義一個對象(自動局部對象),函數定義結束時,對象自動釋放。在釋放前自動調用析構函數;2.static局部對象在函數調用結束時並不釋放,因此不調用析構函數。只在main()結束或調用

exit()函數結束程序時,才調用static局部對象的析構函數;3.若定義一個全局對象,當離開其作用域時(main()結束或調用exit()),調用析構函數;4.new運算符動態建立一個對象,用delete釋放對象時,先調用析構函數

 

構造函數與析構函數調用的順序:對於同一類的存儲類別,析構函數調用的順序與構造函數相反。即先構造後析構。不同類的存儲類別,如上(析構函數的具體情況)

 

7.對象數組和對象指針

 

this指針:在每個成員函數中都包含一個特殊的指針,this指針,它是指向本類對象的指針。它的值是當前被調用的成員函數所在對象的起始地址。this指針是隱式使用的,它是作爲參數傳遞給成員函數的

如 int box ::valum()

{

   return height*width*length

}

C++把它處理爲

int box::valum(box *this)

{

   return (this->height)*(this->width)*(this->length);

}

 

8.const對象,const變量,const指針

在定義變量時,加上const關鍵字,則變量的值在程序運行期間不能改變,這種變量稱爲常變量,即const變量,如:const int a = 3;定義常變量時必須初始化,且它的值不能在改變。常變量不能出現在賦值的左邊。從計算機實現的角度看,常變量是在變量的基礎上加上限制:存儲單元的值不能變化。因此常變量又稱爲只讀變量

const變量是從應用的角度提出的,如有時要求某些變量的值不允許改變(某些函數的參數),這時就用const加以限制

 

常對象:const Time t1(22,10,10)//常對象必須初始化,對象t1所有成員的值都不能改

 

const對象不能調用非const成員函數

 

如何引用const對象的成員呢?將函數聲明爲const即可 

 如 void get_time() const (常或const成員函數

 

常對象成員:常數據成員和常成員函數

       常數據成員的值不能改變。只能通過構造函數的參數初始化表對常數據成員,不能採用構造函數對常數據成員進行賦

       如果將成員函數聲明爲常成員函數,只能引用本類的數據成員,不能修改它們。常成員函數在聲明和定義時都要用const ,調用時不必加const

       const數據可以被const成員函數引用,也可以被非const成員函數引用

       const成員函數可以引用const數據成員,也可以引用非const數據成員

 

       如果對象被定義爲常對象,只能調用其中的const成員函數。不要誤認爲const對象的成員函數都是const成員函數。const對象只能保證其數據成員是const數據,其值不能被修改。如果const對象的成員函數沒有const關鍵字,編譯系統把它作爲非const成員函數處理。

 

const指針:一個指針固定的與一個對象相聯繫,常用來做函數的形參

      在C++程序設計中,常用const指針和const 引用做函數的形參,這樣既能保證數據安全,在調用函數時又不必建立實參的拷貝

      調用函數建立實參的拷貝時,都要調用複製拷貝構造函數,有時間開銷。用const指針和const引用做函數形參,可以提高程序運行效率

 

對象的動態建立和釋放:new 和delete運算符

 

 

         

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章