最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、構造函數(shù)

   在C++中,構造函數(shù)是六個函數(shù)中的第一個,當一個對象被創(chuàng)建時,在它的整個周期中,是一個由生到死的過程,即構造函數(shù)創(chuàng)建對象,析構函數(shù)析構對象。在對象被創(chuàng)建時,調用構造函數(shù)創(chuàng)建一個對象,這是對象的創(chuàng)建過程。在C++中,當你創(chuàng)建一個對象時需要調用構造函數(shù)創(chuàng)建對象,在類中,有默認的構造函數(shù),當然你也可以去使用構造函數(shù)去創(chuàng)建對象,對數(shù)據(jù)進行初始化??聪旅娴睦樱?/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;
};

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

二、析構函數(shù)

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

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;
};

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

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

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

  在C++中,如果在構造函數(shù)中有申請內(nèi)存的操作,且在其他函數(shù)中出現(xià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()
    {
      if(p != NULL)
      {
       delete[] p;
       p=NULL;
      }
    }
  private:
    char *p;
}; 
int main()
{
  Base a;
  Base b(a);
  return 0;
}

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

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

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

則是語法錯誤。

四、賦值函數(shù)

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

進行賦值操作,就需要賦值函數(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ù)中進行了對象的賦值操作,如果沒有對“=”運算符進行重載定義,則會產(chǎn)生兩次釋放同一個內(nèi)存的

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

當進行釋放指針的操作時,就可能產(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ù)也是直接返回該常對象的地址,則為取其地址。

相關文章

  • C++初始化列表學習

    C++初始化列表學習

    在C++中,struct和class的唯一區(qū)別是默認的克訪問性不同,而這里我們不考慮訪問性的問題,所以下面的代碼都以struct來演示
    2013-09-09
  • 教你使用Matlab制作圖形驗證碼生成器(app designer)

    教你使用Matlab制作圖形驗證碼生成器(app designer)

    這篇文章主要和大家分享如何利用Matlab制作一款圖形驗證碼生成器,文中的實現(xiàn)步驟講解詳細,感興趣的小伙伴可以跟隨小編動手試一試
    2022-02-02
  • VS2019開發(fā)Linux C++程序的實現(xiàn)步驟

    VS2019開發(fā)Linux C++程序的實現(xiàn)步驟

    由于很多unix特有的函數(shù)無法在Windows上使用,而Vim又用的不太順手,突然想到最初用vs的時候有一個基于Linux的C++開發(fā)。本文就來介紹一下,感興趣的可以了解一下
    2021-07-07
  • C++11的新特性簡單匯總介紹 (一)

    C++11的新特性簡單匯總介紹 (一)

    本文將對C++11的以上新特性進行簡單的講解,以便大家能夠快速了解到C++11對C++的易用性方面祈禱的巨大作用。
    2016-07-07
  • C/C++中的回調用法詳細講解

    C/C++中的回調用法詳細講解

    這篇文章主要介紹了回調函數(shù)在C/C++中的重要意義及應用,回調函數(shù)通過將函數(shù)作為參數(shù)傳遞,實現(xiàn)了模塊的解耦、靈活性和可擴展性,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • C++中類模板的應用你了解多少

    C++中類模板的應用你了解多少

    這篇文章主要為大家詳細介紹了C++中類模板的應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++移動語義介紹與使用講解

    C++移動語義介紹與使用講解

    首先,移動語義和完美轉發(fā)這兩個概念是在C++的模板編程的基礎上,新增的特性,主要是配合模板來使用。本篇會從C++的值類型,到移動拷貝與移動賦值來理解移動語義與完美轉發(fā)
    2022-09-09
  • C++實現(xiàn)LeetCode(120.三角形)

    C++實現(xiàn)LeetCode(120.三角形)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(120.三角形),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法

    C++循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法

    這篇文章主要介紹了C++循環(huán)鏈表之約瑟夫環(huán)的實現(xiàn)方法,對于學習數(shù)據(jù)結構與算法有一定的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • C語言實現(xiàn)素因子分解

    C語言實現(xiàn)素因子分解

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)素因子分解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論

台山市| 布拖县| 南城县| 漾濞| 清水河县| 宜良县| 甘德县| 金昌市| 凭祥市| 平舆县| 黑龙江省| 沅陵县| 桐庐县| 青冈县| 什邡市| 威远县| 慈溪市| 德江县| 正镶白旗| 临夏县| 安宁市| 屯留县| 大兴区| 合山市| 台北县| 宜阳县| 珲春市| 清水县| 宁都县| 太谷县| 中超| 封开县| 腾冲县| 松原市| 泰宁县| 临洮县| 兴隆县| 新巴尔虎左旗| 志丹县| 嘉荫县| 丰城市|