成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用C++類構造函數

開發 后端
開始時如果用一個已經初始化過了的自定義C++類的類型對象去初始化另一個新構造的對象的時候,函數的形式參數是C++類型的一個引用變量,且必須是引用。

下面講如何使用C++類構造函數,所謂C++類是定義同一類所有對象的變量和方法的藍圖或原型,C++類體內的成員是需要開辟動態開辟堆內存的,如果我們不自定義拷貝構造函數而讓系統自己處理。

我們已經學習過了的構造函數和析構函數的相關知識,對于普通型的對象來說,他們之間的復制是很簡單的,例如: 自己定義的的對象同樣是對象,誰也不能阻止我們用以下的方式進行復制,例如:

  1. #include <iostream>    
  2. using namespace std;    
  3.     
  4. class Test    
  5. {    
  6. public:    
  7.     Test(int temp)    
  8.     {    
  9.         p1=temp;    
  10.     }    
  11. protected:    
  12.     int p1;    
  13.     
  14. };    
  15.     
  16. void main()    
  17. {    
  18.     Test a(99);    
  19.     Test b=a;    

普通對象和對象同為對象,他們之間的特性有相似之處也有不同之處,C++類對象內部存在成員變量,而普通對象是沒有的,當同樣的復制方法發生在不同的對象上的時候,那么系統對他們進行的操作也是不一樣的,就C++類對象而言,相同型的對象是通過拷貝構造函數來完成整個復制過程的。

在上面的代碼中,我們并沒有看到拷貝構造函數,同樣完成了復制工作,這又是為什么呢?因為當一個沒有自定義的拷貝構造函數的時候系統會自動提供一個默認的拷貝構造函數,來完成復制工作。

下面,我們為了說明情況,就普通情況而言(以上面的代碼為例),我們來自己定義一個與系統默認拷貝構造函數一樣的拷貝構造函數,看看它的內部是如何工作的!

代碼如下:

  1. #include <iostream>    
  2. using namespace std;    
  3.     
  4. class Test    
  5. {    
  6. public:    
  7.     Test(int temp)    
  8.     {    
  9.         p1=temp;    
  10.     }    
  11.     Test(Test &c_t)//這里就是自定義的拷貝構造函數    
  12.     {    
  13.         cout<<"進入copy構造函數"<<endl;    
  14.         p1=c_t.p1;//這句如果去掉就不能完成復制工作了,此句復制過程的核心語句    
  15.     }   

上面代碼中的Test(Test &c_t)就是我們自定義的拷貝構造函數,拷貝構造函數的名稱必須與C++類名稱一致,函數的形式參數是本C++類型的一個引用變量,且必須是引用。 當用一個已經初始化過了的自定義C++型對象去初始化另一個新構造的對象的時候。

拷貝構造函數就會被自動調用,如果你沒有自定義拷貝構造函數的時候系統將會提供給一個默認的拷貝構造函數來完成這個過程。上面代碼的復制核心語句就是通過Test(Test &c_t)拷貝構造函數內的p1=c_t.p1;語句完成的。

如果取掉這句代碼,那么b對象的p1屬性將得到一個未知的隨機值;就上面的代碼情況而言,很多人會問到,既然系統會自動提供一個默認的拷貝構造函數來處理復制,那么我們沒有意義要去自定義拷貝構造函數呀。#t#

對,就普通情況而言這的確是沒有必要的,但在某寫狀況下,C++類體內的成員是需要開辟動態開辟堆內存的,如果我們不自定義拷貝構造函數而讓系統自己處理,那么就會導致堆內存的所屬權產生混亂,試想一下,已經開辟的一端堆地址原來是屬于對象a的。

由于復制過程發生,b對象取得是a已經開辟的堆地址,一旦程序產生析構,釋放堆的時候,計算機是不可能清楚這段地址是真正屬于誰的,當連續發生兩次析構的時候就出現了運行錯誤。

責任編輯:chenqingxiang 來源: 博客園
相關推薦

2010-01-27 10:13:22

C++類對象

2010-01-20 18:06:06

C++虛基類

2010-01-28 10:49:22

C++構造函數

2010-02-02 17:39:31

C++構造函數

2010-01-25 14:43:00

C++構造函數

2010-01-27 17:16:52

C++構造函數

2011-07-20 13:40:09

拷貝構造函數

2023-11-28 11:51:01

C++函數

2025-02-06 13:23:09

C++函數參數

2010-01-25 09:50:58

C++函數對象

2010-01-27 16:10:32

C++靜態構造函數

2010-01-22 11:13:16

C++靜態

2010-02-05 17:16:05

C++構造函數

2010-02-01 11:01:30

C++靜態構造函數

2010-01-25 17:05:37

C++語言

2009-08-13 17:30:30

C#構造函數

2024-04-28 11:01:27

C++編程語言函數

2010-01-28 13:35:41

調用C++函數

2010-01-26 14:23:50

C++類

2024-12-06 12:00:00

C++構造函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九久久精品 | 日韩精品久久 | 91国产视频在线观看 | 伊人网综合 | 最新国产福利在线 | 日韩亚洲欧美一区 | 一区二区三区四区在线 | 狠狠干av| 成人精品国产一区二区4080 | 夜夜av| 亚洲成人激情在线观看 | 亚洲精品视频在线 | 天天躁日日躁xxxxaaaa | 久草在线青青草 | 日韩视频精品在线 | 国产亚洲欧美日韩精品一区二区三区 | 日本精品一区二区 | 午夜影院 | 免费1区2区3区 | 黑人巨大精品欧美一区二区免费 | 色婷婷激情综合 | 国产欧美一区二区三区国产幕精品 | 天堂成人国产精品一区 | 一级毛片中国 | 一区在线免费视频 | 久久1区| 久久乐国产精品 | 99久久婷婷国产综合精品电影 | 欧美日本韩国一区二区 | 成年女人免费v片 | 日本国产一区二区 | 免费观看av | 色视频一区二区 | 国产黄色免费网站 | 九九国产 | 日韩一区二区三区视频在线观看 | 欧美精品乱码99久久影院 | 黄色大片免费网站 | 国产伦精品一区二区三区高清 | 亚洲一区二区三区在线 | 精品www|