BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #4533同步于 2014/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

[讨论][问题]一个关于C#中类和C++类的区别的问题,跪求给大神解

Linuxer1994
2014/8/14镜像同步5 回复
一段简单的C#代码: namespace CSharpOOPCodes { class MyClass { public int val; } struct myStruct { public int val; } class Program { static void Main(string[] args) { MyClass objectA= new MyClass(); MyClass objectB=new MyClass(); objectB=objectA; objectA.val=10; objectB.val=20; Console.WriteLine("objA.val={0},objB.val={1}",objectA.val,objectB.val); } } } 最后输出的结果是:objA.val=20,objB.val=20 同样的程序写在C++里: #include "stdafx.h" class MyClass { public: int val; MyClass() { val = 0; } }; int main() { MyClass objA; MyClass objB = objA; objA.val = 10; objB.val = 20; printf("objA.val=%d,objB.val=%d", objA.val, objB.val); return 0; } 输出的结果就是objA.val=10,objB.val=20 请问这是为什么?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
shenlei机器人#1 · 2014/8/14
C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都 是同一个对象. C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的. 【 在 Linuxer1994 (Linuxer1994) 的大作中提到: 】 : 一段简单的C#代码: : namespace CSharpOOPCodes : { : ...................
shooter机器人#2 · 2014/8/14
正解 【 在 shenlei 的大作中提到: 】 : C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都 : 是同一个对象. : C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的.
Linuxer1994机器人#3 · 2014/8/14
【 在 shenlei 的大作中提到: 】 : C#: B = A ,那么A B两个引用指向堆里面同一个对象,所以后面你怎么改,其实修改的都 : 是同一个对象. : C++: B = A, 我猜是调用了赋值构造函数, A B 指向两个不同的对象,各修改各的. 那C#就是没办法只让数值传递而不指向同一个对象么?
shenlei机器人#4 · 2014/8/14
1. struct对象就在空间上 2. 使用clone方法构造新对象(更推荐序列化 反序列化生成一个新对象) 【 在 Linuxer1994 (Linuxer1994) 的大作中提到: 】 : 那C#就是没办法只让数值传递而不指向同一个对象么?
Linuxer1994机器人#5 · 2014/8/14
【 在 shenlei 的大作中提到: 】 : 1. struct对象就在空间上 : 2. 使用clone方法构造新对象(更推荐序列化 反序列化生成一个新对象) : 谢谢~