自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#構造函數(shù)與C++的區(qū)別淺析

開發(fā) 后端
C#構造函數(shù)與C++的有什么樣子的區(qū)別呢?那么本文就向你從二方面介紹C#構造函數(shù)與C++的區(qū)別。

C#構造函數(shù)與C++的區(qū)別1、

C++ 不允許在一個構造函數(shù)中調用另外一個構造函數(shù)(稱為委派構造函數(shù)調用),而 C# 則允許。例如:

C++構造函數(shù)示例:

  1. struct Point {  
  2. public:  
  3. int X, Y;  
  4. Point(int x, int y);  
  5. Point(Point pt) : Point(pt.X, pt.Y) { } // 錯誤,C++ 不允許  
  6. };  

C#構造函數(shù)示例:

  1. struct Point {  
  2. public int X, Y;  
  3. public Point(int x, int y);  
  4. public Point(Point pt) : Point(pt.X, pt.Y) { } // 可以,C# 允許  
  5. };  

委派構造函數(shù)調用語法上非常自然和易懂,因此你也許會質疑 C++ 不提供它是不是故意給程序員添麻煩。事實上,C++ 不提供這一特性并不是出于語法上的考慮,而是出于資源管理的考慮(噢,這樣的事情對 C++ 來說還有很多很多)。

我們知道,C++ 的構造函數(shù)用于分配資源,而析構函數(shù)用于釋放資源,構造函數(shù)和析構函數(shù)調用必須匹配,否則就打破了 C++ 的基本規(guī)則。

如果允許委派構造函數(shù)調用,則顯然會打破這一規(guī)則——構造函數(shù)被執(zhí)行兩次,而析構函數(shù)只執(zhí)行一次。當然,對一些類,例如前面的那個 Point 來說這不是個問題,但是從語言機制的角度講這個特性可能屬于“危險”的特性。注:在最新的 C++ 標準提議草案中,Herb 等人有一個關于允許委派構造函數(shù)調用的提案,當然這很大程度上是為了方便 C++/CLI 綁定。

C#構造函數(shù)與C++的區(qū)別2、

在 C++ 構造函數(shù)中,虛函數(shù)調用會被編譯器自動轉為普通函數(shù)調用,而在 C# 構造函數(shù)中允許進行虛函數(shù)調用。C++ 這樣處理自然有它的原因——在 C++ 中,構造函數(shù)執(zhí)行完成后對象才初始化好,對于多態(tài)對象來說,也就意味著構造函數(shù)在背后執(zhí)行了很重要的一件事情——初始化對象的虛函數(shù)表。

如果我們在基類的構造函數(shù)中調用了虛函數(shù),則因為此時對象的虛函數(shù)表仍舊是基類的虛函數(shù)表,所以無法進行正確的虛函數(shù)調用。也就是這個原因,通常我們應該避免在構造函數(shù)中調用虛函數(shù),因為它違背了虛函數(shù)的語義。而在 C# 中,在對象的構造函數(shù)執(zhí)行之前對象的類型信息就已經(jīng)初始化好了,所以可以進行正常的虛函數(shù)調用。

C#構造函數(shù)與C++的區(qū)別的基本情況就向你介紹到這里,希望對你學習C#構造函數(shù)與C++的區(qū)別有所幫助。

【編輯推薦】

  1. C#結構體變量學習淺談
  2. 解析C#結構體指針
  3. C#指針使用簡析
  4. C#結構學習的詳細介紹
  5. 關于C#結構的一些認識
責任編輯:仲衡 來源: qqread.com
相關推薦

2009-11-17 09:07:55

靜態(tài)構造函數(shù)

2011-06-11 21:36:44

C#C++

2010-01-27 17:16:52

C++構造函數(shù)

2011-06-14 12:27:38

C#C++

2009-08-14 09:15:28

C#調用構造函數(shù)

2009-07-31 15:44:02

C#靜態(tài)構造函數(shù)

2009-08-13 17:38:42

C#構造函數(shù)

2009-08-13 18:15:06

C#繼承構造函數(shù)

2009-09-18 09:02:45

CLR Via C#

2009-08-13 18:02:11

C#靜態(tài)構造函數(shù)

2009-08-14 09:43:59

C#復制構造函數(shù)

2009-08-14 09:58:09

C#復制構造函數(shù)

2009-08-13 13:42:54

C#構造函數(shù)

2025-02-06 13:23:09

C++函數(shù)參數(shù)

2009-08-14 09:50:46

C#復制構造函數(shù)

2009-08-13 18:36:36

C#繼承構造函數(shù)

2009-08-24 13:41:23

C# 泛型約束

2009-08-13 18:10:31

C#靜態(tài)構造函數(shù)

2009-07-31 14:15:38

C# 構造函數(shù)

2009-08-24 18:09:13

C#構造函數(shù)
點贊
收藏

51CTO技術棧公眾號