C#与C++

来源:互联网 发布:现在学java前景怎么样 编辑:程序博客网 时间:2024/05/23 17:59

  Ø  输入输出的不同

    C++的输入时cin,输出为cout,而C#的控制台输入和输出(I/O)是Console.Read()/Console.ReadLine和Console.WriteLine()/Console.Write。

    u  Console.Read()/Console.ReadLine

      Console.Read: Concole.Read()用于获取输入值的ASCII值,返回值是一个int类型

 

      Console.ReadLine:Console.ReadLine() 用于获取字符串变量,返回值是string类型

    u  Console.WriteLine()/Console.Write

      Write()和WriteLine()都是System.Console提供的方法,两着主要用来将输出流由指定的输出装置(默认为屏幕)显示出来.两着间的差异在Console.WriteLine()方法是将要输出的字符串与换行控制字符一起输出,当次语句执行完毕时,光标会移到目前输出字符串的下一行.至于Console.Write()方法,光标会停在输出字符串的最后一个字符后,不会移动到下一行。

  Ø  程序结构

    1)C#是一种对大小写字母敏感的语言,分号“;”是语句间的分隔符。与C++不同的是,C#当中声明代码文件(头文件)与实现代码文件(cpp文件)不是独立存在的,所有代码(类声明和类实现)都位于一个扩展名为cs的文件内。

    2在C#当中的每样东西都被封装到一个类中,C#的类又被封装到一个命名空间当中(就象一个文件夹中的文件)。类似于 C++,main方法是你的程序的入口点。C++的main函数调用名称是"main",而C#的main函数是以大写字母M为起点的名称是"Main"。

  Ø  命名空间

    每一个类都被包装进一个命名空间。命名空间的概念与C++的完全相同,但在C#当中使用命名空间的频率较C++还高。

    在.NET库当中,System是位于顶层的命名空间,别的命名空间都存在这个命名空间之下。默认状态下,存在一个全局的命名空间,因此一个在命名空间外定义的类将直接在这个全局命名空间之下;因此,你能在没有任何点限定符的情况下访问这个类。

    C++当中的"#include"指示被C#的"using"关键字取代,它后面跟着一个命名空间的名字。正如上面的"using System"。"System"是别的所有被封装的命名空间和类中最底层的命名空间。所有对象的基类都是System命名空间内的Object类派生的。

  Ø  变量

    a)与C++不同,C#变量被访问之前必须被初始化;否则编译时会报错。因此,访问一个未初始化变量是不可能的事。  

    b)C#中你不会访问到一个不确定的指针。(C#已经把指针概念异化,限制更严格。所以有些资料上会说C#取消了指针概念) 

    c)一个超出数组边界的表达式是不可访问的。  

    d)C#中没有全局的的变量或全局函数,全局方式的操作是通过静态函数和静态变量来实现的。

  Ø  数据类型

    A.值类型

    B.引用类型

    u  值类型

    值类型数据在栈中分配。他们包括:所有基本或内置类型(不包括string类型)、结构类型、枚举类型(enum type) 

    C#当中的类型范围与C++有所不同;例如,C++的long型是4个字节,而在C#当中是8个字节。同样地,bool型和string型都不同于C++。bool型只接受true和false两种值。不接受任何整数类型。

    u  引用类型

    引用类型包括class(类)、interface(接口)、数组、delegate(委托)、objectstring。其中object和string是两个比较特殊的类型。object是C#中所有类型(包括所有的值类型和引用类型)的根类。string类型是一个从object类直接继承的密封类型(不能再被继承),其实例表示Unicode字符串

    引用类型在堆中分配,当它们不再被使用时将被垃圾收集。它们使用new运算符来创建,对这些类型而言,不存在C++当中的delete操作符,根本不同于C++会显式使用delete这个运算符去释放创建的这个类型。C#中,通过垃圾收集器,这些类型会自动被收集处理。

 

    u  值类型与引用类型的关系

     可以把值类型与引用类型的值赋给object类型变量,C#用“装箱”和“拆箱”来实现值类型与引用类型之间的转换。

    “装箱”就是将值类型包装成引用类型的处理过程。


    “拆箱”操作与“装箱”相反,它是将一个object类型转换成值类型。

  Ø  修饰符

    在C++中存在三种访问修饰符:public、private和protected,而在C#里面存在

  Ø  接口

    一个接口就是一个抽象的基类,这个基类仅仅包含功能描述,而这些功能的实现则由子类来完成。C#中你要用interface关键字来定义象接口这样的类。.NET就是基于这样的接口上的。C#中你不支持C++所允许的类多继承(即一个派生类可以从两个或两个以上的父类中派生)。但是多继承方式可以通过接口获得。也就是说你的一个子类可以从多个接口中派生实现。

  Ø  数组

    C++相比,C#在数组语法上的特点如下:    

    A.方括号被置于数据类型之后而不是在变量名之后。 

    B.创建数组元素要使用new操作符。 

    C.C#支持一维、多维以及交错数组(数组中的数组)。

  Ø  索引器 

    索引器:是C#引入的一个新型的类成员,它允许类或结构的实例按照与数组相同的方式进行索引。

    索引器类型于属性,它们的不同之处在于索引器的访问器采用参数。

    定义了索引器之后,就可以像访问数组一样,使用[]运算符访问类的成员。

    定义索引器的方式与定义属性有些类似,其一般形式如下:

      [修饰符] 数据类型 this<[数据类型 标识符]>

       {

          get{//获得属性的代码}

          set{//设置属性的代码}

       }

    u  属性与索引器的比较

  Ø  小结

    作为编程语言,C#是现代的、简单的、完全面向对象的,而且是类型安全的。重要的是,C#是一种现代编程语言。在类、名字空间、方法重载和异常处理等方面,C#去掉了C++中的许多复杂性,借鉴和修改了Java的许多特性,使其更加易于使用,不易出错。


0 0
原创粉丝点击