欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

淺析C#與C++相關(guān)概念的比較

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

1、在C#中,class的變量為引用類型,在C++中class的變量為值類型,如myclass mc,在C++中,mc是值類型,成員存儲在程序的棧區(qū),在C#中,mc是引用類型,指向堆中的成員。

2、switch語句,C#中case后面可根字符串,如case “abc“,但在C++中卻不行,C++中case后面只跟數(shù)字,字符,和枚舉。

3、在C#中沒有C++中的私有繼承和保護繼承,只有公有繼承。

4、C#中可以通過關(guān)鍵字sealed把一個類聲明為密封類,即不能被作為父類被繼承出派出類,在C++中可通過把構(gòu)造函數(shù)聲明為private,讓其不能被作為父類被繼承出派出類,且同時不能實例化,但可通過類的靜態(tài)函數(shù)調(diào)用構(gòu)造函數(shù)來產(chǎn)生實例。

5、C#支持用戶自定義類型轉(zhuǎn)換,可通過關(guān)鍵字implicit定義隱式轉(zhuǎn)換,可通過關(guān)鍵字explicit定義顯式轉(zhuǎn)換。在C++中,可通過重載 = 操作符來達(dá)到隱式轉(zhuǎn)換的目的。

6、在C#中,運算符重載則一定要把運算符重載函數(shù)定義為類的成員,且必須用static和public關(guān)鍵字修飾,且對于一元運算符重載,需要一個參數(shù),對于二元運算符重載則需要兩個參數(shù)。在C++中,運算符重載,有一個默認(rèn)的隱含參數(shù)this,則一元運算符重載無需參數(shù),二元只需一個參數(shù)。而且C#中不能重載 = 號運算符。

7、C#的catch語句有一個不帶任何參數(shù)的一般catch語句,它相當(dāng)于C++中的catch(...)。

8、C#中用關(guān)鍵字abstract來聲明一個類為抽象類,抽象類不能實例化。在C++中通過聲明一個純虛函數(shù)來使一個類變成抽象類,同樣不能實例化。

9、對于結(jié)構(gòu)類型,即用關(guān)鍵字struct定義的數(shù)據(jù)結(jié)構(gòu),在C++中它與class的用法和功能相近,只是用class定義默認(rèn)成員的訪問權(quán)限是私有的,而stract默認(rèn)成員的訪問權(quán)限是公有的。而C#中class的變量是引用類型,而struct定義的變量則是值類型,成員的訪問權(quán)限與class一樣。注意,C#中結(jié)構(gòu)不允許有析構(gòu)函數(shù)。

10、對于結(jié)構(gòu)類型,預(yù)定義的無參數(shù)構(gòu)造函數(shù)對每個結(jié)構(gòu)都存在,不能刪除或重定義它,可以重載構(gòu)造函數(shù),但必須帶有參數(shù)。

11、在C#中數(shù)組是對象,繼承于System.Array,擁有一定的操作方法,并且數(shù)據(jù)是引用類型,引用在?;蚨焉希鴶?shù)組對象本身則在堆中。C++中數(shù)組只是數(shù)據(jù)或類的對象的一個集合,數(shù)組本身并不是對象,但數(shù)組中的元素可以是對象,數(shù)組本身可在棧中或在堆中。C#并不支持動態(tài)數(shù)組,而C++則可以通過new動態(tài)分配內(nèi)存,實現(xiàn)動態(tài)數(shù)組。

12、在C#中存在一種叫接口的數(shù)據(jù)類型,它是一組函數(shù)的聲明并沒有實現(xiàn)函數(shù)的引用類型,不能實例化,只有類才能實現(xiàn)接口,實現(xiàn)接口必須實現(xiàn)接口中的所有聲明的函數(shù)。在C++中雖然沒有這種默認(rèn)數(shù)據(jù)類型,但是在C++中可以自己創(chuàng)建一個接口類型,就是把里面的函數(shù)全部聲明純虛函數(shù),并不含數(shù)據(jù)成員,來實現(xiàn)相同的功能。

13、C#中一個類可以實現(xiàn)多個接口,各個接口必須以‘,'分隔,如果還有基類,則基類必須寫在最前面,如果多個接口中有多個相同的簽名和返回類型的接口成員,類則可以實現(xiàn)單個成員來滿足所有包含重復(fù)成員的接口。這是C#中的默認(rèn)方式,也可以用點運算符來指定實現(xiàn)的成員所屬的接口。這與C++中的多繼承而產(chǎn)生的歧義問題相似,它并不提供這種默認(rèn)的機制,在C++中則是相對自由的,你可以通過域運算符來指明你所調(diào)用的是哪個基類的成員,或是你實現(xiàn)的是哪個基類的成員。若你只想你的派生類對同一簽名的函數(shù)或成員只有一份實現(xiàn),則可以使用虛繼承的方法來實現(xiàn)。

14、在C#中類只能單繼承不能實現(xiàn)多繼承,而對于接口,接口可以實現(xiàn)單繼承和多繼承,而實現(xiàn)它的類必須對接口繼承體系中所有的接口成員提供實現(xiàn)。

15、在C#中存在叫裝箱和拆箱的轉(zhuǎn)換,為什么會有這兩種轉(zhuǎn)換,是因為C#中的變量數(shù)據(jù)有的保存在堆中(引用類型),有的則保存在棧中(值類型),當(dāng)要把值類型賦給引用類型時,就要把值類型裝箱,反之則需要拆箱。而且拆箱是顯式轉(zhuǎn)換。裝箱之后,引用類型在堆中保存的值是原值類型的一個副本。在C++中則不存在這樣的問題,因為變量數(shù)據(jù)默認(rèn)是保存在棧中的,若要保存在堆中則需要用到指針,要賦值則需要p->data = data或(*p).data = data。也可以通過重載‘='運算符來達(dá)到隱式轉(zhuǎn)換的效果。

16、在C#的泛型編程中,可用關(guān)鍵字where來對類型參數(shù)進行約束,例如class myclass<T1, T2, T3> where T2:cls2 where T3:In3。則只有cls2類型或其派生類型才能作為T2的實參,而只有In3接口類型才能作為T3的實參。這與C++中泛型編程中的模板特化和模板偏特化相似,在C++中可以用這樣的形式實現(xiàn)相似的功能,class myclass<T1, cls, In3>。

上一篇:用typedef定義類型的總結(jié)分析

欄    目:C語言

下一篇:VC實現(xiàn)圖片拖拽及動畫的實例

本文標(biāo)題:淺析C#與C++相關(guān)概念的比較

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4217.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有