C#和C++的主要区别
2012-02-23 21:27
225 查看
算是一篇学习笔记吧。记录一下学习中的感受,以便日后查询。
1 cs中的所有类都派生于同一个称作System.Object的基类。cpp没有这么一个基类,但vc中有一个祖先类CObject类,与cs不同的是,用户自定义的类可以不从它继承。
2 c#中定义一个实例时,如果是数值型,则在栈上创建;如果是引用型,则在堆上创建。cpp中,如果是 myclass m_object;则是在栈上创建;如果是myclass m_object=new myclass();则是在堆上创建。
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++中的私有成员变量,但其实是通过借口函数。
1 cs中的所有类都派生于同一个称作System.Object的基类。cpp没有这么一个基类,但vc中有一个祖先类CObject类,与cs不同的是,用户自定义的类可以不从它继承。
2 c#中定义一个实例时,如果是数值型,则在栈上创建;如果是引用型,则在堆上创建。cpp中,如果是 myclass m_object;则是在栈上创建;如果是myclass m_object=new myclass();则是在堆上创建。
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++中的私有成员变量,但其实是通过借口函数。
相关文章推荐
- C#和C++的主要区别
- C#和C++的主要区别
- JAVA/C#中神奇的i=i++/i--,完全区别于C/C++
- C++的类与C#的类的区别
- C/C++与C#区别(4)
- C++内存管理(可以参考C++与C#区别文章的后面部分)
- C++和C#中隐藏方法的区别
- C#和C++释放内存的区别
- C#和C++中char类型的区别
- C#和C++的区别是什么?
- 浅谈C++和C#的区别&C#与.NET的关系
- c# 与c/c++/java的区别(待续)
- C++与C#的一些区别
- java与c++的主要区别
- 【c#】c#和c++中枚举类型的区别(简)
- C#和C++除了语法上的差别外,还有什么其他的区别
- C#与C++在语言层面的区别(不断补充)
- JAVA/C#中神奇的i=i++/i--,完全区别于C/C++
- 关于C++与C#的部分区别 C#静态构造函数
- C语言和C++ C#的区别在什么地方?