c#和c++在定义类的对象时的区别的思考

在学c#中相等运算符时,遇到同一个类的对象间相等的情况,发现并不是像c++一样是简单的赋值,而是会有占用同一个内存空间的情况。
下面是例子:
class Cde
{
public int a;
public Cde (int b)
{ a = b; }
}//c#类定义,c++相同
c++定义语句:
Cde f1(3);
Cde f2=f1;
f2.a=5;
cout<<f1.a<<" "<<f2.a<<endl;
return 0;
结果为:3 5(f1.a的值仍为3,没有因为f2.a的值改变而改变)

c#定义语句:
Cde f1 = new Cde(2);//开辟内存栈
Cde f2 = f1;//没有用new语句,因此没有开辟新的内存栈
Console.WriteLine("{0},{1}",f1.a,f2.a);
结果为:2,2
若改为:
Cde f1 = new Cde(2);
Cde f2 = f1;
f2.a=5;
Console.WriteLine("{0},{1}",f1.a,f2.a);
结果为:5,5(f1.a的值原本定义时为2,因为f2.a的值变为5而相应变为5,两个绑定在一起的)

总结:c#中定义对象时若未用new开辟空间,而是用类名 对象2=对象1这种形式,是把对象1的地址赋给对象2,他们指向同一个地址,即他们是同一个对象,改变对象1的值,也就是改变对象2的值。这和数组间数组名的赋值一样,是引用类型,指向同一地址。而c++中定义对象时不用加new,直接就开辟一个空间给这个对象,即使是类名 对象2=对象1;这种形式,对象1和对象2也是分开的,是两个对象,仅仅是赋值,改变对象2的值并不会影响对象1的值。

以上是我的一些见解,有什么不对的地方还希望指出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值