C++和C#对象处理的不同方式,怎么解决呢?

十八道胡同 2018-08-30 04:37:35
C++代码
#include "stdafx.h"
#include<string>
#include <iostream>
#include<vector>
using namespace std;

class station
{

public:
int a;
vector<station> stationList;
};
class myClass
{
public:
int a;
int b;
station _station;
};

int _tmain(int argc, _TCHAR* argv[])
{
station s = station();
s.a = 10;
s.stationList = vector<station>();
myClass myclss = myClass();
myclss._station = s;
myclss._station.stationList.push_back(station());
cout << s.stationList.size() << endl;
cout << myclss._station.stationList.size() << endl;
return 0;
}

输出是
0
1

C#代码:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplicationTT
{
class Program
{
class station
{
public int a { get; set; }
public List<station> stationList { get; set; }
}
class myClass
{
public int a { get; set; }
public int b { get; set; }
public station _station { get; set; }
}
static void Main()
{
station s = new station();
s.a = 10;
s.stationList = new List<station>();
myClass myclss =new myClass();
myclss._station = s;
myclss._station.stationList.Add(new station());
Console.WriteLine(s.stationList.Count);
Console.WriteLine(myclss._station.stationList.Count);
}

}
}


输出是
1
1

这个好像在处理默认对象拷贝时的不同,如果要让C++的代码的效果和C#一样,需要把C++里面的station、myClass 修改成struct?还是说应该是把vector<station>修改成vector<station&>??

谢谢各位
...全文
1161 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2018-09-14
  • 打赏
  • 举报
回复
鉴于此处的不同,在C++中可以用指针的方式来达到减少对象拷贝,降低内存使用的目的。


谢谢各位的回复。
十八道胡同 2018-09-05
  • 打赏
  • 举报
回复
引用 4 楼 srhouyu 的回复:
[quote=引用 楼主 LCL_data 的回复:]

这个好像在处理默认对象拷贝时的不同,如果要让C++的代码的效果和C#一样,需要把C++里面的station、myClass 修改成struct?还是说应该是把vector<station>修改成vector<station&>??

谢谢各位


应该说,C++里面,用变量名操作变量一定是值类型的;C#里面用变量名操作变量既有引用类型,也有值类型。

对于C#,内置类型中除了object和string外,都是值类型。自定义类型中,struct是值类型,class是引用类型。

因此,要让C++的代码的效果和C#一样,要么都用引用类型,例如在C++中使用指针和引用。要么都用值类型,例如在C#中使用struct而不用class。

C++中struct和class没有大区别,而C#中struct和class区别较大。[/quote]

谢谢回复。
srhouyu 2018-08-31
  • 打赏
  • 举报
回复
引用 楼主 LCL_data 的回复:
这个好像在处理默认对象拷贝时的不同,如果要让C++的代码的效果和C#一样,需要把C++里面的station、myClass 修改成struct?还是说应该是把vector<station>修改成vector<station&>??

谢谢各位


应该说,C++里面,用变量名操作变量一定是值类型的;C#里面用变量名操作变量既有引用类型,也有值类型。

对于C#,内置类型中除了object和string外,都是值类型。自定义类型中,struct是值类型,class是引用类型。

因此,要让C++的代码的效果和C#一样,要么都用引用类型,例如在C++中使用指针和引用。要么都用值类型,例如在C#中使用struct而不用class。

C++中struct和class没有大区别,而C#中struct和class区别较大。
  • 打赏
  • 举报
回复
2楼正解,确实是引用和对象实例的区别。
十八道胡同 2018-08-30
  • 打赏
  • 举报
回复
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<string>
#include <iostream>
#include<vector>
using namespace std;

class station
{

public:
int a;
vector<station> stationList;
};
class myClass
{
public:
myClass(station& s) :_station(s)
{
}
int a;
int b;
station & _station;
};

int _tmain(int argc, _TCHAR* argv[])
{
station s = station();
s.a = 10;
s.stationList = vector<station>();
myClass myclss = myClass(s);
myclss._station = s;
myclss._station.stationList.push_back(station());
cout << s.stationList.size() << endl;
cout << myclss._station.stationList.size() << endl;
return 0;
}



好像可以这样子
十八道胡同 2018-08-30
  • 打赏
  • 举报
回复
https://blog.csdn.net/qq_15267341/article/details/79087479

这个帖子有说:
最后总结:
当对象A赋值给同一类型的对象B后,那么A和B的关系是:
C# :B引用A,对B修改,即对A进行修改
C++: 赋值时,A将自己拷贝一份给B,A和B之间是相互独立的,互不影响

65,186

社区成员

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

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