C#和C++的主要区别

转载 2011年01月23日 12:36:00

算是一篇学习笔记吧。记录一下学习中的感受,以便日后查询。

1 cs中的所有类都派生于同一个称作System.Objecet的基类。cpp没有这么一个基类,但vc中有一个祖先类CObject类,与cs不同的是,用户自定义的类可以不从它继承。

2 c#中定义一个实例时,如果是数值型,则在栈上创建;如果是引用型,则在堆上创建。cpp中,如果是 myclass m_object;则是在栈上创建;如果是myclass m_object=new myclass();则是在堆上创建。

                                                                                                                                 修改于2006年4月14日。

3 对于要到执行时才能获取的常量,cs中提供了只读属性的解决方案。这种属性只能在构造函数中初始化,初始化后再次不能修改。例如在变量声明中写:public readonly int myVaule;如果希望常量只读属性是静态的则按照如下声明:public static readonly int myValue;但这种静态公有属性要在一种叫静态构造函数的构造函数中声明(说的有些罗嗦:))静态构造函数的写法 static myClassname(){myValue=0;}。而在cpp中没有这些新东西。似乎c#是cpp的资料篇。呵呵!

                                                                                                                               

4 对于函数参数的定义有两种方案:一是值传递,这种传递不改变实参的值。函数首先把实参的数值拷贝到形参中,然后进行对形参进行操作。二是引用传递或是指针传递,这种方案不是把实参的值拷贝给形参,而是把实参的指针或引用拷贝给形参,于是对形参的操作就转为了对实参的操作。这种操作会改变实参的值。在下列3种情况下适合将函数参数定义为引用(注:这三条摘自与c++prime中文版第三版284页):一、必须改变成指针来允许改变实参的值时。二、向主函数返回而外的结果。三、向函数传递大对象。当运用第三条时,用户可能只是想传递大对象,但不希望改变实参的值,这时就要用到const型的引用。

C++中的写法

值传递 : void myfunc(int pa1,int pa2);

指针传递:void myfunc(int *pa1,int * pa2);

引用传递:void myfunc(int &pa1,int &pa2);

常引用传递:void myfunc(const int &pa1,const int &pa2);

C#中的写法:

使用ref引用传递: void myfunc(ref int a,ref int b);

使用out引用传递: void myfunc(out int a,out int b);

ref和out的区别:使用ref时在调用函数前必须把实参初始化,out不必。也就是说ref用于函数需要实参有值得情况。

                                                                                                                        

5 对于属性的读取。C++中一般把属性定义成私有,然后再定义公有的接口对这个私有成员进行操作。C#中把C++中的属性成为字段,然后又定义了一个概念叫属性。属性和字段通过C#提供的接口进行传递。用户对属性直接进行操作,然后调用上面说的接口函数传递给字段。好处就是更直观,给人的感觉似乎是直接操作C++中的私有成员变量,但其实是通过借口函数。

                                                                                                                                  修改于2006年4月17日。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smstone/archive/2006/04/17/663055.aspx

C和C++中struct使用的区别

今天参看了louden用c编写的编译器,发现其中一些地方使用struct很奇妙。所以又研究了一下struct的区别,并发现c和c++在某些地方是有区别的。 struct作为类的一种特...
  • CSDNwei
  • CSDNwei
  • 2016年02月19日 14:39
  • 1413

C++栈学习——顺序栈和链栈的区别

C++中栈有顺序栈和链栈之分,在顺序栈中,定义了栈的栈底指针(存储空间首地址base)、栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是可以不用定义的) //顺序栈数据结...
  • handsomewangjg
  • handsomewangjg
  • 2015年08月24日 22:57
  • 2559

简述C/S和B/S模式的区别

C/S模式: 客户端/服务器模式 工作原理: Client向Server提交一个请求;Server则使用一些方法处理这个请求,并将效果返回给ClientB/S结构: Browser/Serve...
  • lluozh2015
  • lluozh2015
  • 2015年10月13日 14:50
  • 3587

C#与C++的主要区别

  • 2013年08月12日 17:21
  • 44KB
  • 下载

C#与C++的主要区别

  • 2011年07月19日 22:12
  • 1.1MB
  • 下载

c++中构造函数初始化的方法以及主要区别

一、我的问题是关于初始化C++类成员的。我见过许多这样的代码: CSomeClass::CSomeClass() { x=0; y=1; } 而在别的什...
  • IanChoi
  • IanChoi
  • 2011年10月29日 23:29
  • 30585

c++中构造函数初始化的方法以及主要区别

一、我的问题是关于初始化C++类成员的。我见过许多这样的代码:  CSomeClass::CSomeClass()  {  x=0;  y=1;  }  而在别的什...
  • chivalrousli
  • chivalrousli
  • 2014年12月15日 09:22
  • 609

【记录】c++中构造函数初始化的方法以及主要区别

原文地址:http://blog.163.com/tfn2008@yeah/blog/static/11032131920113602529911/ 一、我的问题是关于初始化C++类成员的。我见过许...
  • jiasike
  • jiasike
  • 2014年12月07日 11:32
  • 292

Java和C++的主要区别以及Java垃圾回收机制

Java和C++的主要区别: 1.指针  JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统...
  • ye_123
  • ye_123
  • 2015年08月12日 19:23
  • 602

c++中构造函数初始化的方法以及主要区别

一、我的问题是关于初始化C++类成员的。我见过许多这样的代码(包括在你的栏 目中也见到过):  CSomeClass::CSomeClass()  {  x=0;  y=1;  }  而在...
  • crtnawwan9623
  • crtnawwan9623
  • 2013年01月26日 15:00
  • 440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#和C++的主要区别
举报原因:
原因补充:

(最多只允许输入30个字)