C++ C# 函数形参的问题!

jiezi316 2009-10-23 10:46:51

C++ 中
void Test(User userInfo)
{
userInfo.userId = 0 //因为这里是对形参拷贝的修改,所以不会影响函数外userInfo的值
}

void Test(User &userInfo)
{
userInfo.userId = 0;//会改变函数外userInfo的值,因为这里传的是引用了。
User userInfo2(3);
userInfo = userInfo2; //会改变userInfo。
}



C#中
void Test(User userInfo)
{
userInfo.userId = 0 //这里的修改会改变函数外userInfo的值,因为C#中的类都是引用。
User userInfo2 = new User(3); //新实例化一个User对象userInfo2
userInfo = userInfo2; //不会对外面的userInfo有任何改变,因为在函数里面不能更改引用本身
}


这2种语言我怎么都想不通。C++ 传引用的话,无论成员还是引用本身都是可以修改的,而c#却只能修改成员,不能修改引用本身。如果在C++中实现C#类似的东西(不用指针,就用引用)该怎么实现呢!?

我倒是觉得C#中的类很像指针,因为在函数里面可以修改指针指向内容中的值,但在函数里面修改形参指针的指向不会对函数外的该参数有任何影响,因为指针作为形参,也会被拷贝一个副本,你不过是修改了拷贝的值中的地址值而已

这也说明了另1个问题,就是为什么C#中的类对象直接可以实现多态。而C++中要实现多态要用指针来实现。

大家说说我的理解对么?
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiezi316 2009-10-23
  • 打赏
  • 举报
回复

这也说明了另1个问题,就是为什么C#中的类对象直接可以实现多态。而C++中要实现多态要用指针来实现。
jiezi316 2009-10-23
  • 打赏
  • 举报
回复

我倒是觉得C#中的类很像指针,你在函数里面可以修改指针指向内容中的值,但在函数里面修改形参指针的指向不会对函数外的该参数有任何影响,因为指针作为形参,也会被拷贝一个副本,你不过是修改了拷贝的值中的地址值而已
jiezi316 2009-10-23
  • 打赏
  • 举报
回复

我跟踪发现,对形参的拷贝,是按类型拷贝的,如果是对象,貌似就是拷贝的所有存储区域。不晓得跟踪对没有?
陌上花花 2009-10-23
  • 打赏
  • 举报
回复
跟着学习下
jiezi316 2009-10-23
  • 打赏
  • 举报
回复

有人回答就好。这C++的人气这么这么差啊!!
ztenv 版主 2009-10-23
  • 打赏
  • 举报
回复
看错了,真不好意思。。。。。。
ztenv 版主 2009-10-23
  • 打赏
  • 举报
回复
C#中是引用,不是指针,也不像指针。多态的支持(类层次,继承,虚函数,指针/引用)


void Test(User &userInfo)
{
userInfo.userId = 0;//会改变函数外userInfo的值,因为这里传的是引用了。
User userInfo2(3);
userInfo = userInfo2; //会改变userInfo。
//这里明显不对的,而是要写成:*userInfo=userInfo2;这样才会改变;
userInfo=&userInfo2;//是不能改变userInfo中的值的,因为进来的是个地址的拷贝;如果我没有记错
}


64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧