程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺析C#與C++相干概念的比擬

淺析C#與C++相干概念的比擬

編輯:關於C++

淺析C#與C++相干概念的比擬。本站提示廣大學習愛好者:(淺析C#與C++相干概念的比擬)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析C#與C++相干概念的比擬正文


1、在C#中,class的變量為援用類型,在C++中class的變量為值類型,如myclass mc,在C++中,mc是值類型,成員存儲在法式的棧區,在C#中,mc是援用類型,指向堆中的成員。

2、switch語句,C#中case前面可根字符串,如case “abc“,但在C++中卻不可,C++中case前面只跟數字,字符,和列舉。

3、在C#中沒有C++中的公有繼續和掩護繼續,只要私有繼續。

4、C#中可以經由過程症結字sealed把一個類聲明為密封類,即不克不及被作為父類被繼續出派出類,在C++中可經由過程把結構函數聲明為private,讓其不克不及被作為父類被繼續出派出類,且同時不克不及實例化,但可經由過程類的靜態函數挪用結構函數來發生實例。

5、C#支撐用戶自界說類型轉換,可經由過程症結字implicit界說隱式轉換,可經由過程症結字explicit界說顯式轉換。在C++中,可經由過程重載 = 操作符來到達隱式轉換的目標。

6、在C#中,運算符重載則必定要把運算符重載函數界說為類的成員,且必需用static和public症結字潤飾,且關於一元運算符重載,須要一個參數,關於二元運算符重載則須要兩個參數。在C++中,運算符重載,有一個默許的隱含參數this,則一元運算符重載無需參數,二元只需一個參數。並且C#中不克不及重載 = 號運算符。

7、C#的catch語句有一個不帶任何參數的普通catch語句,它相當於C++中的catch(...)。

8、C#頂用症結字abstract來聲明一個類為籠統類,籠統類不克不及實例化。在C++中經由過程聲明一個純虛函數來使一個類釀成籠統類,異樣不克不及實例化。

9、關於構造類型,即用症結字struct界說的數據構造,在C++中它與class的用法和功效鄰近,只是用class界說默許成員的拜訪權限是公有的,而stract默許成員的拜訪權限是私有的。而C#中class的變量是援用類型,而struct界說的變量則是值類型,成員的拜訪權限與class一樣。留意,C#中構造不許可有析構函數。

10、關於構造類型,預界說的無參數結構函數對每一個構造都存在,不克不及刪除或重界說它,可以重載結構函數,但必需帶有參數。

11、在C#中數組是對象,繼續於System.Array,具有必定的操作辦法,而且數據是援用類型,援用在棧或堆上,而數組對象自己則在堆中。C++中數組只是數據或類的對象的一個聚集,數組自己其實不是對象,但數組中的元素可所以對象,數組自己可在棧中或在堆中。C#其實不支撐靜態數組,而C++則可以經由過程new靜態分派內存,完成靜態數組。

12、在C#中存在一種叫接口的數據類型,它是一組函數的聲明並沒有完成函數的援用類型,不克不及實例化,只要類能力完成接口,完成接口必需完成接口中的一切聲明的函數。在C++中固然沒有這類默許數據類型,然則在C++中可以本身創立一個接口類型,就是把外面的函數全體聲明純虛函數,其實不含數據成員,來完成雷同的功效。

13、C#中一個類可以完成多個接口,各個接口必需以‘,'分隔,假如還有基類,則基類必需寫在最後面,假如多個接口中有多個雷同的簽名和前往類型的接口成員,類則可以完成單個成員來知足一切包括反復成員的接口。這是C#中的默許方法,也能夠用點運算符來指定完成的成員所屬的接口。這與C++中的多繼續而發生的歧義成績類似,它其實不供給這類默許的機制,在C++中則是絕對自在的,你可以經由過程域運算符來指明你所挪用的是哪一個基類的成員,或是你完成的是哪一個基類的成員。若你只想你的派生類對統一簽名的函數或成員只要一份完成,則可使用虛繼續的辦法來完成。

14、在C#中類只能單繼續不克不及完成多繼續,而關於接口,接口可以完成單繼續和多繼續,而完成它的類必需對接口繼續系統中一切的接口成員供給完成。

15、在C#中存在叫裝箱和拆箱的轉換,為何會有這兩種轉換,是由於C#中的變量數據有的保留在堆中(援用類型),有的則保留在棧中(值類型),當要把值類型賦給援用類型時,就要把值類型裝箱,反之則須要拆箱。並且拆箱是顯式轉換。裝箱以後,援用類型在堆中保留的值是原值類型的一個正本。在C++中則不存在如許的成績,由於變量數據默許是保留在棧中的,若要保留在堆中則須要用到指針,要賦值則須要p->data = data或(*p).data = data。也能夠經由過程重載‘='運算符來到達隱式轉換的後果。

16、在C#的泛型編程中,可用症結字where來對類型參數停止束縛,例如class myclass<T1, T2, T3> where T2:cls2 where T3:In3。則只要cls2類型或其派生類型能力作為T2的實參,而只要In3接口類型能力作為T3的實參。這與C++中泛型編程中的模板特化和模板偏特化類似,在C++中可以用如許的情勢完成類似的功效,class myclass<T1, cls, In3>。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved