C++ VS C# 结构体和对象的细微区别
C++ VS C# 結構體和對象的細微區別
類與結構體在C++與C#中都是可以使用的,但是兩者在兩種語言中的區別卻很大,今天在這里進行一下記錄。
在C++中,類與結構體的唯一區別就是默認訪問權限的區別。在struct中,默認的訪問權限為public,而在類中,默認的訪問權限為private。
舉例一段代碼,這樣更容易理解:
在C#中,默認權限不再是兩者的區別,其默認訪問權限均為private的。區別在于,struct在C#中是值類型,值類型在棧上分配內存,而class為引用類型,在托管堆上分配內存。
舉例一段代碼,更直觀:
//C#struct MyStruct{public int Value;};class MyClass{public int Value;};static void Main(string[] args){MyStruct myStruct1 = new MyStruct();MyStruct myStruct2 = myStruct1;myStruct1.Value = 10;myStruct2.Value = 20;Console.WriteLine("myStruct1.Value = {0}", myStruct1.Value);Console.WriteLine("myStruct2.Value = {0}", myStruct2.Value);MyClass myClass1 = new MyClass();MyClass myClass2 = myClass1;myClass1.Value = 10;myClass2.Value = 20;Console.WriteLine("myClass1.Value = {0}", myClass1.Value);Console.WriteLine("myClass2.Value = {0}", myClass2.Value);}該段代碼的輸出結果如下:
myStruct1.Value = 10
myStruct2.Value = 20
myClass1.Value = 20
myClass2.Value = 20
從結果中可以看出,類的"=“就相當于指針賦值,MyClass myClass2 = myClass1語句完全可以認為是將myClass1的地址賦值給myClass2,所以對myClass2的任何更改都會反映到myClass1之中。而struct的”="操作,就是簡單的賦值操作,也就是將myStruct1.Value復制給myStruct2.Value而已,對myStruct2的任何操作都不會影響到myStruct1。
struct和class的"=“的區別,在C++中根本不存在。無論是struct還是class,C++中的”="都是賦值操作,也就是和C#的struct一致。
本文參考來自:https://www.cnblogs.com/wodeyitian/archive/2011/02/18/2460251.html
總結
以上是生活随笔為你收集整理的C++ VS C# 结构体和对象的细微区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于c++静态类的说法
- 下一篇: c#和c++中枚举类型的区别(简)