中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

創(chuàng)新互聯(lián)專注于江源網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供江源營(yíng)銷型網(wǎng)站建設(shè),江源網(wǎng)站制作、江源網(wǎng)頁(yè)設(shè)計(jì)、江源網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造江源網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供江源網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

   在C++中,構(gòu)造函數(shù)是六個(gè)函數(shù)中的第一個(gè),當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),在它的整個(gè)周期中,是一個(gè)由生到死的過(guò)程,即構(gòu)造函數(shù)創(chuàng)建對(duì)象,析構(gòu)函數(shù)析構(gòu)對(duì)象。在對(duì)象被創(chuàng)建時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象,這是對(duì)象的創(chuàng)建過(guò)程。在C++中,當(dāng)你創(chuàng)建一個(gè)對(duì)象時(shí)需要調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象,在類中,有默認(rèn)的構(gòu)造函數(shù),當(dāng)然你也可以去使用構(gòu)造函數(shù)去創(chuàng)建對(duì)象,對(duì)數(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ù)是無(wú)類型的,第一個(gè)構(gòu)造函數(shù)是默認(rèn)的構(gòu)造函數(shù),第二個(gè)構(gòu)造函數(shù)是只對(duì)一個(gè)數(shù)據(jù)成員進(jìn)行初始化,其它的數(shù)據(jù)成員是隨機(jī)值。第二個(gè)構(gòu)造函數(shù)是對(duì)兩個(gè)數(shù)據(jù)成員進(jìn)行初始化,其它的數(shù)據(jù)成員為隨機(jī)值。第三個(gè)構(gòu)造函數(shù)是對(duì)所有的數(shù)據(jù)成員進(jìn)行初始化。

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

   在C++中,構(gòu)造函數(shù)是創(chuàng)建一個(gè)對(duì)象時(shí),那么析構(gòu)函數(shù)則是這個(gè)對(duì)象由生到死的死亡過(guò)程。同時(shí)析構(gòu)函數(shù)也在析構(gòu)對(duì)象時(shí)可以將已經(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ù)如上所示,它無(wú)類型、無(wú)參數(shù)、無(wú)返回值,如果在構(gòu)造對(duì)象時(shí)沒(méi)有進(jìn)行空間的開(kāi)辟內(nèi)存的分配時(shí),那么

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

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

  在C++中,如果在構(gòu)造函數(shù)中有申請(qǐng)內(nèi)存的操作,且在其他函數(shù)中出現(xiàn)對(duì)象的拷貝,那么就會(huì)需要拷貝構(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)了對(duì)對(duì)象的拷貝賦值,那么就需要拷貝構(gòu)造函數(shù),如果沒(méi)有拷貝構(gòu)造函數(shù),則會(huì)使用默認(rèn)的

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

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

則是語(yǔ)法錯(cuò)誤。

四、賦值函數(shù)

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

進(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)行了對(duì)象的賦值操作,如果沒(méi)有對(duì)“=”運(yùn)算符進(jìn)行重載定義,則會(huì)產(chǎn)生兩次釋放同一個(gè)內(nèi)存的

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

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

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

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

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

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

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

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

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

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

新聞名稱:C++中的六個(gè)函數(shù)
瀏覽地址:http://www.rwnh.cn/article2/jiedoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、App開(kāi)發(fā)外貿(mào)建站、定制網(wǎng)站、建站公司、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
新昌县| 诏安县| 大竹县| 扬州市| 德保县| 西安市| 土默特右旗| 城固县| 淳安县| 宿州市| 抚松县| 霞浦县| 安义县| 瓮安县| 浦北县| 天气| 长寿区| 天峨县| 离岛区| 丽水市| 汝南县| 礼泉县| 乐平市| 长顺县| 当阳市| 吴桥县| 正蓝旗| 克拉玛依市| 克拉玛依市| 平度市| 邵阳县| 普兰县| 房产| 濮阳市| 乐亭县| 株洲县| 新绛县| 应用必备| 黔西| 扎兰屯市| 泸西县|