C++精講3構造函數與析構函數

一.類::構造函數

1.編碼規範:聲明變量賦初值

int i=0;

int *p=NULL;  //最新版本爲nullptr

malloc申請到的內存區域使用memset進行設置

2.對象在定義時進行初始化

完成對象初始化的函數即構造函數

類的對象的初始化只能由類的成員函數來進行;

簡歷對象的同時,自動調用構造函數;

類對象的定義涉及到一個雷鳴和一個對象名;

由於類的唯一性和對象的多樣性,用類名而不是對象名來作爲構造函數名;

默認構造函數:沒有定義構造函數時,編譯器會提共一個默認構造函數;(C++規定,類必須有一個構造函數)

只要定義一個構造函數,C++編譯器就不再提供默認的構造函數;

與定義變量類似,在默認構造函數創建對象時,如果創建的是全局對象或靜態對象,則對象的位模式全爲0,否則對象值是隨機的;

例如:

class Car{

public:

voidrun();

voidstop();

private:

int m_price;

int m_carNum;

};

此類中沒有定義構造函數,編譯器的默認構造函數爲在定義對象時給予m_price,m_carNun一個默認的隨機值。

定義一個構造函數:

class Car{

public:

Car();//構造函數也可以重載;此也爲默認的構造函數

Car(int price=1000,int number=0);    //實參必須給初始值 否則定義構造函數將會出錯

voidrun();

voidstop();

void set(int price, int number);

private:

int m_price;

int m_carNum;

};

實現:

Car::Car(int price, int number)     //定義放在類的的外部時的格式 “類名::”

{

set(price,number);   //調用類的成員函數set();

}

構造函數另一個特殊之處是它沒有返回類型,函數體中也不允許有返回值,但可以有無值返回語句 " return;".

如果建立一個對象數組:Desk dd[5]; //對象數組dd,構造函數會被調用5次

3.構造函數的初始化列表中數據的初始化順序和聲明的順序相同

例如:

class Student{

public:

  Student(int id):m_id(id),m_score(100)   //冒號表示後面要對類的數據成員進進行初始化(性能更快)
  {

//一般情況下使用這種構造函數初始化
      /*
     m_id=id;
     m_score=100;
      */

private:

int m_id;

int m_score;

 };  

  構造函數可以有多個,可以被重載;構造函數可以用於隱式類型轉換;//加關鍵字explicit來防止隱式類型轉換

二.類::析構函數

一個類可能在構造函數裏分配資源,這些資源需要在對象不復存在以前被釋放;

析構函數也是特殊類型的成員,沒有返回類型,沒有參數,不能隨意調用,也沒有重載。只是在類對象生命期結束的時候,由系統自動調用;

析構函數名,就是在構造函數名前加上一個邏輯非運算行“~”,表示逆構造函數。

例如:

  4 class Student{
  5     public:
  6         explicit Student(int id);
          //構造函數
  7         ~Student();          //析構函數
  8         inline int getId()
  9         {
 10             return m_id;
 11         }
 12         void setId(int id)
 13         {
 14             m_id=id;
 15         }
 16        inline  int getScore()
 17         {
 18             return m_score;
 19         }
 20         void setScore(int score)
 21         {
 22             m_score=score;
 23         }
 24      private:
 25         int m_id;
 26         int m_score;
 27 };

    如果類沒有自定義析構函數,編譯器提供一個默認的析構函數,而且只有一個。


發佈了44 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章