欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的六個函數(shù)

 更新時間:2018年05月07日 08:38:29   作者:XNQC  
本文給大家介紹了C++中的六個函數(shù),非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧

一、構(gòu)造函數(shù)

   在C++中,構(gòu)造函數(shù)是六個函數(shù)中的第一個,當(dāng)一個對象被創(chuàng)建時,在它的整個周期中,是一個由生到死的過程,即構(gòu)造函數(shù)創(chuàng)建對象,析構(gòu)函數(shù)析構(gòu)對象。在對象被創(chuàng)建時,調(diào)用構(gòu)造函數(shù)創(chuàng)建一個對象,這是對象的創(chuàng)建過程。在C++中,當(dāng)你創(chuàng)建一個對象時需要調(diào)用構(gòu)造函數(shù)創(chuàng)建對象,在類中,有默認(rèn)的構(gòu)造函數(shù),當(dāng)然你也可以去使用構(gòu)造函數(shù)去創(chuàng)建對象,對數(shù)據(jù)進(jìn)行初始化??聪旅娴睦樱?/p>

class Base 
{
  public:
    Base()
    {}
    Base(int a=0):num(a)
    {}
    Base(int a=0,int b=0):num(a),age(b)
    {}
    Base(int a=0,int b=0,double c=0.0):num(a),age(b),slaroy(c)
    {}
  private:
    int num;
    int age;
    double slaroy;
};

在上面的構(gòu)造函數(shù)中,構(gòu)造函數(shù)必須與類名相同,構(gòu)造函數(shù)是無類型的,第一個構(gòu)造函數(shù)是默認(rèn)的構(gòu)造函數(shù),第二個構(gòu)造函數(shù)是只對一個數(shù)據(jù)成員進(jìn)行初始化,其它的數(shù)據(jù)成員是隨機(jī)值。第二個構(gòu)造函數(shù)是對兩個數(shù)據(jù)成員進(jìn)行初始化,其它的數(shù)據(jù)成員為隨機(jī)值。第三個構(gòu)造函數(shù)是對所有的數(shù)據(jù)成員進(jìn)行初始化。

二、析構(gòu)函數(shù)

   在C++中,構(gòu)造函數(shù)是創(chuàng)建一個對象時,那么析構(gòu)函數(shù)則是這個對象由生到死的死亡過程。同時析構(gòu)函數(shù)也在析構(gòu)對象時可以將已經(jīng)分配的內(nèi)存空間進(jìn)行回收。

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
};

        析構(gòu)函數(shù)如上所示,它無類型、無參數(shù)、無返回值,如果在構(gòu)造對象時沒有進(jìn)行空間的開辟內(nèi)存的分配時,那么

析構(gòu)函數(shù)如同默認(rèn)的析構(gòu)函數(shù)一樣,如果進(jìn)行了內(nèi)存的分配時,當(dāng)一個對象被析構(gòu)時同時還要對其所分配的內(nèi)存進(jìn)行回收,否則就會造成內(nèi)存泄漏。

三、拷貝構(gòu)造函數(shù)

  在C++中,如果在構(gòu)造函數(shù)中有申請內(nèi)存的操作,且在其他函數(shù)中出現(xiàn)對象的拷貝,那么就會需要拷貝構(gòu)造函數(shù)。

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    Base(const Base &s)
    {
     p= new char[strlen(s.p)+1];
     strcpy(p,s.p);
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
}; 
int main()
{
  Base a;
  Base b(a);
  return 0;
}

       由于在主函數(shù)中出現(xiàn)了對對象的拷貝賦值,那么就需要拷貝構(gòu)造函數(shù),如果沒有拷貝構(gòu)造函數(shù),則會使用默認(rèn)的

拷貝構(gòu)造函數(shù),那么此時進(jìn)行的是淺拷貝,那么會產(chǎn)生析構(gòu)函數(shù)對內(nèi)存重復(fù)釋放的錯誤。那么此時就需要進(jìn)行深拷貝

操作,重新編寫拷貝構(gòu)造函數(shù)對對象進(jìn)行拷貝賦值。而在編寫拷貝構(gòu)造函數(shù)時要注意參數(shù)必須是“&”引用傳遞,否則

則是語法錯誤。

四、賦值函數(shù)

   在C++中,賦值函數(shù)為第四個函數(shù),如果在構(gòu)造函數(shù)中有申請內(nèi)存的操作,且在其他程序中有兩個對象直接或間接

進(jìn)行賦值操作,就需要賦值函數(shù)。

class Base
{
  public:
    Base()
    {}
    Base()
    {
     p= new char[strlen("default")+1];
     strcpy(p,"default");
    }
    Base(const Base &s)
    {
     p= new char[strlen(s.p)+1];
     strcpy(p,s.p);
    }
    Base& operator=(const Base &s)
    {
      if(&s==this)
       return *this;
      delete[] p;
      p= new char[strlen(s.p)+1];
      strcpy(p,s.p);
      return *this;
    }
    ~Base()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
}; 
int main()
{
  Base a,c;
  Base b(a);
  c=a;
  return 0;
}

     由于在主函數(shù)中進(jìn)行了對象的賦值操作,如果沒有對“=”運(yùn)算符進(jìn)行重載定義,則會產(chǎn)生兩次釋放同一個內(nèi)存的

操作的錯誤。在“=”重載操作中,如果涉及到指針操作,則必須判斷兩個對象是否為同一個對象即自賦值操作,否則

當(dāng)進(jìn)行釋放指針的操作時,就可能產(chǎn)生錯誤。然后要用delete釋放原有的內(nèi)存資源,否則將造成內(nèi)存泄漏。

五、對一般對象的取址函數(shù)

  在C++中,對一般對象的取址函數(shù)為第五個函數(shù)。

class Base
{
  public:
    Base* operator&()
    {
     return this;
    }
}; 

在一般對象的取址函數(shù)是直接返回該對象的地址,則為取其地址。

六、對常對象的取址函數(shù)

  在C++中,對常對象的取址函數(shù)為第六個函數(shù)。

class Base
{
  public:
    const Base* operator&() const
    {
     return this;
    }
};

   在常對象的取址函數(shù)也是直接返回該常對象的地址,則為取其地址。

相關(guān)文章

  • C語言簡易實(shí)現(xiàn)掃雷小游戲

    C語言簡易實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言簡易實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 在Linux下編譯C或C++程序的教程

    在Linux下編譯C或C++程序的教程

    這篇文章主要介紹了在Linux下編譯C或C++程序的教程,是C/C++入門學(xué)習(xí)中的必備知識,需要的朋友可以參考下
    2015-07-07
  • 基于opencv實(shí)現(xiàn)視頻中的顏色識別功能

    基于opencv實(shí)現(xiàn)視頻中的顏色識別功能

    這篇文章主要介紹了基于opencv實(shí)現(xiàn)視頻中的顏色識別功能,文章詳細(xì)介紹了顏色識別的原理及opencv中的顏色模型,基于c++代碼實(shí)現(xiàn)顏色識別功能,需要的朋友可以參考下
    2022-07-07
  • C語言實(shí)現(xiàn)電話簿項(xiàng)目管理

    C語言實(shí)現(xiàn)電話簿項(xiàng)目管理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電話簿項(xiàng)目管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++控制權(quán)限關(guān)鍵字protected

    C++控制權(quán)限關(guān)鍵字protected

    這篇文章主要介紹了C++控制權(quán)限關(guān)鍵字protected,protected和private類似,而對于派生類來說,protected與public類似,下面來一起倆姐更多詳細(xì)內(nèi)容吧,需要的小伙伴可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)俄羅斯方塊

    C語言實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++詳解多線程中的線程同步與互斥量

    C++詳解多線程中的線程同步與互斥量

    線程間如何通信同步?一些伙伴好奇線程間的通信及同步方法,沒關(guān)系,下面小編就繼續(xù)給大家科普下線程間通信及同步的方法以及互斥量
    2022-05-05
  • C++實(shí)現(xiàn)AVL樹的完整代碼

    C++實(shí)現(xiàn)AVL樹的完整代碼

    AVL樹是高度平衡的而二叉樹。它的特點(diǎn)是:AVL樹中任何節(jié)點(diǎn)的兩個子樹的高度最大差別為1。 今天通過本文給大家分享C++實(shí)現(xiàn)AVL樹的完整代碼,感興趣的朋友一起看看吧
    2021-06-06
  • vscode搭建STM32開發(fā)環(huán)境的詳細(xì)過程

    vscode搭建STM32開發(fā)環(huán)境的詳細(xì)過程

    這篇文章主要介紹了vscode搭建STM32開發(fā)環(huán)境的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • C++編輯距離(動態(tài)規(guī)劃)

    C++編輯距離(動態(tài)規(guī)劃)

    這篇文章主要介紹了C++編輯距離(動態(tài)規(guī)劃),編輯距離是指兩個字符串之間,由一個轉(zhuǎn)成另一個所需的最少編輯操作次數(shù),限免詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01

最新評論