C++ Builder
C++ Builder是由Borland公司 继Delphi之后又推出的一款高性能可视化集成开发工具。C++ Builder具有快速的可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它的属性,设置一下它的外观,就可以快速地建立应用程序界面;C++ Builder内置了100多个完全封装了Windows公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件;C++ Builder具有一个专业C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等。它实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。
C++ Builder优化的32位原码(Native Code)编译器建立在Borland公司久经考验的编译技术基础之上,提供了高度安全性、可靠性、快速性的编译优化方法,完全编译出原始机器码而非中间码,软件执行速度大大提高。在编译和连接过程中,C++ Builder自动忽略未被修改的原代码和没有使用的函数,从而大大提高了编译和连接速度。C++ Builder的CPU透视工具包括五个独立的小面板,可以对正在运行程序从内部进行深层次的了解。另外C++ Builder还提供了一个专业开发环境所必需的命令行工具,以帮助建立C++程序或者准备编译和连接的程序进行更精细的控制。
C++ Builder可以编译所有符合ANSI/ISO标准的原代码,支持最新ANSI C++/C语言特征:模板(Templates)、例外(Exceptions)、运行类型信息(Runtime Type Information)、Namespaces等,另外它还可以使用标准C++库且支持标准模板库(STL),以前的所有C++/C原代码可以不经过修改,直接移植到C++ Builder环境下来。C++ Builder完全支持32位长文件名、多线程程序设计,且允许程序员直接调用任何Win95和NT API函数。
C++ Builder的集成开发环境(IDE)提供了可视化窗体设计器、对象观察器、控件板、工程管理器、集成编辑器和调试器等一系列可视化快速应用程序开发(RAD)工具,让程序员可以很轻松地建立和管理自己的程序和资源。
____________________________________________________________________
Visual C++
Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。
Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。
Visual C++它大概可以分成三个主要的部分:
1. Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C++”,所以很多人理所当然的认为,那就是Visual C++了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C++, 它充其量只是Visual C++的一个壳子而已。这一点请切记!
2. MFC。从理论上来讲,MFC也不是专用于Visual C++,Borland C++,C++Builder和Symantec C++同样可以处理MFC。同时,用Visual C++编写代码也并不意味着一定要用MFC,只要愿意,用Visual C++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C++本来就是为MFC打造的,Visual C++中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C++而不用MFC就等于抛弃了Visual C++中很大的一部分功能。但是,Visual C++也不等于MFC。
3. Platform SDK。这才是Visual C++和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C++编译器为核心(不是Visual C++,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。
____________________________________________________________________
c#
C#(读做 "C sharp",中文译音“夏普”)是微软公司在去年六月发布的一种新的编程语言,并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新成果.C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角.
____________________________________________________________________
c语言
C语言是目前世界上流行、使用非常广泛的高级程序设计语言。
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。
常用的编译软件有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,TurboC等等......
C语言的发展历史
C语言的发展颇为有趣。它的原型ALGOL 60语言。(也成为A语言)
1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。
1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。
而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BGPL的第二个字母作为这种语言的名字,这就是C语言。
为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1988年,随着微型计算机的日益普及, 出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准 3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
C语言的特点
1. 简洁紧凑、灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
2. 运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
3. 数据结构丰富
C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
4. C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
5. C语法限制不太严格、程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。
6. C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。
7. C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%。
8. C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。
当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
总之,C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。
************************************************
C语言是最基础的程序语言,是面向基础过程的;
C++是面向对象的,是在C语言在基础上发展起来的;
VC则是为了适应面向对象化编程而产生出来的,他是一种直观的编程语言环境;
C#是一种网络语言,是vs.net的一种语言,也是从C语言的基础上发展起来的,但是是为了适应网络而产生的。
上述的C++,VC,C#三种编程语言都是从最基本的C语言的基础上发展起来的。都是为了适应个自环境才产生的
************************************************
C语言,完全不面向对象,也就是说只面向过程
C++非完全面向对象。。。
C#完全面向对象
************************************************
C 语言与 C++ 的区别有很多:
-------------------------
1,全新的程序程序思维,C 语言是面向过程的,而 C++ 是面向对象的。
2,C 语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而 C++ 对于大多数的函数都是有集成的很紧密,特别是 C 语言中没有的 C++ 中的 API 是对 Window 系统的大多数 API 有机的组合,是一个集体。但你也可能单独调用 API。
3,特别是 C++ 中的图形处理,它和语言的图形有很大的区别。C 语言中的图形处理函数基本上是不能用在中 C++ 中的。C 语言标准中不包括图形处理。
4,C 和 C++ 中都有结构的概念,但是在 C 语言中结构只有成员变量,而没成员方法,而在 C++ 中结构中,它可以有自己的成员变量和成员函数。但是在 C 语言中结构的成员是公共的,什么想访问它的都可以访问;而在 VC++ 中它没有加限定符的为私有的。
4,C 语言可以写很多方面的程序,但是 C++ 可以写得更多更好,C++ 可以写基于DOS程序,写 DLL,写控件,写系统。
5,C 语言对程序的文件的组织是松散的,几乎是全要程序处理;而 C++ 对文件的组织是以工程,各文件分类明确。
6,C++ 中的 IDE 很智能,和 VB 一样,有的功能可能比VB还强。
7,C++ 对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入 MFC 中的类的时候,加入变量的时候等等。
8,C++ 中的附加工具也有很多,可以进行系统的分析,可以查看 API;可以查看控件。
9,调试功能强大,并且方法多样。
C# 与 C++ 比较的话
-------------------
最重要的特性就是 C# 是一种完全面向对象的语言,而 C++ 不是,另外 C++ 是基于 IL 中间语言和 .NET Framework CLR 的,在可移植性,可维护性 和强壮性都比 C++ 有很大的改进
C# 的设计目标是用来开发快速稳定可扩展的应用程序,当然也可以通过 Interop 和 Pinvoke 完成一些底层操作,但是对于一些和底层系统相关很紧密的程序(譬如说驱动程序),还是建议用 C++ 来写
C++ 不允许在一个构造函数中调用另外一个构造函数(称为委派构造函数调用),而 C# 则允许。委派构造函数调用语法上非常自然和易懂,事实上, C++ 不提供这一特性并不是出于语法上的考虑,而是出于资源管理的考虑(这样的事情对 C++ 来说还有很多很多)。
C++ 的构造函数用于分配资源,而析构函数用于释放资源,构造函数和析构函数调用必须匹配,否则就打破了 C++ 的基本规则。如果允许委派构造函数调用,则显然会打破这一规则——构造函数被执行两次,而析构函数只执行一次。当然,对一些类,例如前面的那个 Point 来说这不是个问题,但是从语言机制的角度讲这个特性可能属于“危险”的特性。注:在最新的 C++ 标准提议草案中,Herb 等人有一个关于允许委派构造函数调用的提案,当然这很大程度上是为了方便 C++ /CLI 绑定。
在 C++ 构造函数中,虚函数调用会被编译器自动转为普通函数调用,而在 C# 构造函数中允许进行虚函数调用。 C++ 这样处理自然有它的原因——在 C++ 中,构造函数执行完成后对象才初始化好,对于多态对象来说,也就意味着构造函数在背后执行了很重要的一件事情——初始化对象的虚函数表。
如果我们在基类的构造函数中调用了虚函数,则因为此时对象的虚函数表仍旧是基类的虚函数表,所以无法进行正确的虚函数调用。
也就是这个原因,通常我们应该避免在构造函数中调用虚函数,因为它违背了虚函数的语义。
而在 C# 中,在对象的构造函数执行之前对象的类型信息就已经初始化好了,所以可以进行正常的虚函数调用。
基本上,这些就是两者之间的区别
************************************************
************************************************
c是种标准的c语言,历史比较久远,就像楼上说的是介于高级语言和低级中间的一种语言,它可以用来开发操作系统的驱动,也可以用来开发通用的应用程序
c++是c的扩充,扩充了面向对象的特征!vc++,c++builder都一种c++开发的工具
c#是微软自己设计的一种新的面向对象的语言,它是microsoft .net战略的一个分子,可以开发web和传统的应用程序!
C#和C++最大的不同也是与JAVA最大的相同:单根结构
在面向对象的程序设计中,由于C++的引入而显得尤为突出的一个问题是:所有类最终是否都应从单独一个基础类继承。在
Java中(与其他几乎所有OOP语言一样),对这个问题的答案都是肯定的,而且这个终级基础类的名字很简单,就是一个
“Object”。这种“单根结构”具有许多方面的优点。
单根结构中的所有对象都有一个通用接口,所以它们最终都属于相同的类型。另一种方案(就象C++那样)是我们不能保证
所有东西都属于相同的基本类型。从向后兼容的角度看,这一方案可与C模型更好地配合,而且可以认为它的限制更少一
些。但假期我们想进行纯粹的面向对象编程,那么必须构建自己的结构,以期获得与内建到其他OOP语言里的同样的便利。
需添加我们要用到的各种新类库,还要使用另一些不兼容的接口。理所当然地,这也需要付出额外的精力使新接口与自己
的设计方案配合(可能还需要多重继承)。为得到C++额外的“灵活性”,付出这样的代价值得吗?当然,如果真的需要—
—如果早已是C专家,如果对C有难舍的情结——那么就真的很值得。但假如你是一名新手,首次接触这类设计,象Java那
样的替换方案也许会更省事一些。
单根结构中的所有对象(比如所有Java对象)都可以保证拥有一些特定的功能。在自己的系统中,我们知道对每个对象都
能进行一些基本操作。一个单根结构,加上所有对象都在内存堆中创建,可以极大简化参数的传递(这在C++里是一个复杂
的概念)。
利用单根结构,我们可以更方便地实现一个垃圾收集器。与此有关的必要支持可安装于基础类中,而垃圾收集器可将适当
的消息发给系统内的任何对象。如果没有这种单根结构,而且系统通过一个句柄来操纵对象,那么实现垃圾收集器的途径
会有很大的不同,而且会面临许多障碍。
由于运行期的类型信息肯定存在于所有对象中,所以永远不会遇到判断不出一个对象的类型的情况。这对系统级的操作来
说显得特别重要,比如违例控制;而且也能在程序设计时获得更大的灵活性。
但大家也可能产生疑问,既然你把好处说得这么天花乱坠,为什么C++没有采用单根结构呢?事实上,这是早期在效率与控
制上权衡的一种结果。单根结构会带来程序设计上的一些限制。而且更重要的是,它加大了新程序与原有C代码兼容的难
度。尽管这些限制仅在特定的场合会真的造成问题,但为了获得最大的灵活程度,C++最终决定放弃采用单根结构这一做
法。而Java不存在上述的问题,它是全新设计的一种语言,不必与现有的语言保持所谓的“向后兼容”。所以很自然地,
与其他大多数面向对象的程序设计语言一样,单根结构在Java的设计方案中很快就落实下来。
---------------
这就像MFC里CObject的作用,无论是CWin还是CFile都可以上朔的CObject。
C#和JAVA是极为相像的。c#里object对象类型是所有类型之母,它是其它类型最根本的基类。因为它是所有对象的基类,
所以可把任何类型的值赋给它。例如,一个整型:
object theObj = 123;
对于C++程序员来说:object并不等价于void*。无论如何,忘掉指针总是个好主意。
正因为这种单根结构,我们可以非常容易的做cast,包括up-cast和down-cast,也就是说:在继承树里向上造型up-cast或
向下造型down-cast。
在C#里单根结构还成为了C#独特的加框(作为一个对象利用)消框技术的理论基础。
C#利用单根结构实现在C++里利用Template完成的功能。但我觉得C#没有Template是一大损失。毕竟Template
c#是盗用了java思想的C++
************************************************
1. 命名空间引用方法
C# 通过 命名空间后跟"."来引用.
C++.NET 通过命名空间后跟"::"来引用
如: (c#)System.Data . (c++.net) System::Data
2.生成一个窗体的实例并显示出来
c++.net:
//通过指针操作
frmAbout* frm = new frmAbout();
frm->ShowDialog(this);
C#:
frmAbout frm = new frmAbout(); //生成对象的实例
frm.ShowDialog(this);
3.程序的入口点
c++.net
一个应用程序必须而且只能有一个CWinApp派生类的对象,并且只能由该对象来调
用WinMain()函数。这也对应着一个应用程序只有一个惟一的入口.
如:
[System::STAThreadAttribute]
void __stdcall WinMain()
{
Application::Run(new frmLogin());
}
WinMain函数在调用InitInstance进行初始化完毕后,就调用函数处理消息循环。
Run函数作为一个循环函数,主要进行消息的处理:Run函数不断地查询应用程序的消
息队列,一旦有消息出现就将其发回给Windows,并由Windows再来调用处理该消息的窗口
函数,而窗口则是隐藏在应用程序框架类内部的。当消息队列中没有消息时(大多数的时
候是这种情况),Run函数就会调用OnIdle函数,从而做一些应用程序框架类或用户在程序
空闲时所要做的工作。
如果既没有消息又没有空闲工作要做,那么应用程序就一直处于等待状态.
当应用程序关闭时,Run函数就会调用ExitInstance函数,做一些退出前的处理工作.
C#也如此
如:
//
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new frmLogin());
}
4.设置(或获取)窗体和相关组件的属性
(下面的实例均基于相同的命名空间)
c++.net
this->BackColor =System::Drawing::Color::Gold ;
this->textBox1->Text =this->BackColor.ToString();
this->pictureBox1->BackColor =System::Drawing::Color::Red ;
C#
this.BackColor=System.Drawing.Color.Gold; //获取或设置本窗体的属性用 this.
this.textBox1.Text =this.BackColor.ToString();
Form2 frm2=new Form2();
frm2.BackColor=System.Drawing.Color.Gold; //获取或设置新实例窗体的属性用 新实例名.
frm2.ShowDialog(this) ;
frm2.Close();
this.pictureBox1.BackColor = System.Drawing.Color.Red ;
************************************************
最近在学习C#,也许是过去习惯了使用C/C++的原因吧,刚翻了几页C#的书,就觉得C#的语法太繁琐了。新加入了好多新的关键字,C#中关键字的数量差不多是C++关键字的两倍!光这一点就让我觉得还是C/C++好啊,真可谓简约而绝不简单,呵呵! 回头想想,Java还算折衷,关键字绝对没有C#中这么多!!不过我想,C#作为Microsoft的首推.NET语言,自然有它的道理,微软不会随便加入一大堆没用的关键字。此外,人家都说C#简单,C++却是公认难学的语言,我连C++都搞定了,还怕拿不下C#??呵呵:-) 今天我决定把每天学习到的C#东西总结一下,与C++中的语法做一个对比,这样对比起来学习,效果会好一些~ 同时,我想肯定有许多类似于我这样的C++ fans想学习C#,大家的感受应该是一样的,希望能够对大家有所帮助,也希望大家继续补充
<1>继承性
C#: 与Java类似,不允许使用多重继承
C++ : 可以使用多重继承
<2>数组
C#: C#中数组好用多了,一维数组就不说了,多维数组主要分为rectangular array和jagged array。
int [,] a= new int [5,2]; //rectangular array
int [][] b = new int[2][]; //jagged array
b[0] = new int[10]; b[1] = new int[20];
而且C#还允许这样初始化: int [] b= {1,2}; int [] a = new int [2]{1,4}; 这个比较方便~~~
C++: 没耐心写了,反正也能实现所谓的jagged数组。
攻无不克,战无不胜的C++万岁!!!哈哈:-)
<3>The bool type: There is no conversion between the bool type and other types (specifically int).
<4>The long type: In C#, the long data type is 64 bits, while in C++, it is 32 bits.
<5>The switch statement: Unlike the C++ switch statement, C# does not support fall through from one case label to another.也就是说你在C#中丢掉break语句时,编译器会叫停的。
************************************************
C# C++
------------
1. 关于C#的继承
C#不支持私有继承,所以在使用继承是,基类上不用public或者private修饰
C#不支持多重继承,但是允许类型派生与多个接口。因此C#类型可以派生与另一个类型和任意多个接口(用逗号分开)。
2. 方法的重写与隐藏:
对基类中虚函数重写时,需要使用overrede关键字,不同于C++。
如果基类中的函数不是虚函数,而且派生类中声明同样名称的函数时也没有使用override,那么这时派生类的就隐藏了基类的同名称函数。
如果打算隐藏基类中的同名函数,最好是用new关键字。不同于C++。
3. 调用基类的函数:使用“base.”,而不是具体的“类型名.”(C++的方式)。
4. 抽象类和抽象函数:使用关键字abstract修饰
抽象函数相当于C++的纯虚函数
抽象函数中没有任何代码,必须在非抽象的派生类中重写。
5. 密封类和密封方法:使用关键字sealed
密封类:代表该类不能被继承
密封方法:代表该函数不能被重写
6. C#中的接口继承:
接口类中只能有函数的声明,不能有函数的实现。
接口成员不能声明为私有的、虚拟的、或者静态的。
接口类的定义用interface关键字。
派生于接口的类可以获得接口中的全部成员。
接口引用变量可以指向任何实现该接口的类的实例,而对该接口引用变量调用其成员函数时,会自动选择其所对应的类的函数。
接口之间可以彼此继承。
1. 常量总是静态的,不必也不允许使用static
2. C#中的引用。C#中非内置类型或者自定的Class,都是引用类型,要创建这样的对象必须使用new,和C++有区别。
3. C#中的输出语句:console.WriteLine(…);
4. string类型:它虽然也是引用类型,但是和普通的引用类型有区别。如果两个string对象指向相同的内存,当修改其中一个string,那么回创建一个全新的string,而另一个string不会发生变化。
5. @的作用:C#中采用和C/C++中相同的转义字符,比较麻烦,可以在字符串前面加上@,表示字符串中的所有字符都看作是其原来的含义,如:@”C:\ProCShap\First.cs”
6. C#中的if语句中的条件必须是bool值,不能像C++中可以是整形
7. C#中有一种特殊的循环:foreach
8. C#中的枚举类型和C/C++中的也有区别:访问枚举值的时候需要采用成员访问的方式。另外可以获得枚举值的字符串表示(ToString),也可以从字符串获得枚举值(Enum.Parse())。
9. C#中数组的声明和C++中的有区别:
Int[] intergers; // C#
Int intergers[]; // C++
10. C#中数组的初始化和C++中的区别:
Int[] intergers = new int[32]; // C#
Int intergers[32]; // C++
11. C#中的所有数组类型都是引用类型,和C++中的类似,因为C++中的数组类似一个指针。
12. C#的主程序入口:Main函数,其必须使类或者结构的静态成员函数。
13. 控制台IO:
Console.Read()
Console.ReadLine()
Console.Write()
Console.WriteLine()
C#可以像C一样格式化输出
14. C#中的预处理器指令比C++的强大
15. 函数参数的问题:
当函数的参数是一个引用类型
当函数的参数是一个值类型,但想让其像引用类型一样工作,需要使用ref关键字声明该函数(类似于C++中的&语法):
Void SomeFunc(ref int i);
调用函数时,该参数也要使用ref关键字(不同于C++):
SomeFunc( ref i );
out关键字:作为输出参数,被引用的变量不需要被初始化。使用方法同ref。
16. C#不支持默认参数,不同于C++。
17. 类中数据成员的默认初始化值为0或者false。不同于C++的随机初始化。
18. 如果提供了带参数的构造函数,编译器不会自动生成默认构造函数。
19. 静态构造函数:C#中特有的,只执行一次,不能有参数,主要目的是为静态字段或者属性初始化。.net没有确保类的静态构造函数何时执行,但一般是在第一次调用类的成员之前执行。可以与无参数的实例构造函数共存。
20. 构造函数初始化器,类似于C++中的初始化列表,但有很大区别。C#的构造函数初始化器只能调用其它的构造函数(如this,或者base),而C++的可以初始化数据成员。
21. C#的只读字段
是用readonly关键字修饰的字段。C++中没有。
只读字段不同于const字段,只读字段可以是实例字段,可以在实例初始化函数中初始化赋值,而在其它任何函数中不能改变。
当然只读字段也可以是静态字段。
22. C#中的结构不同于C++。
C++中的结构和类时等同的。
C#中的结构是值类型的,一般是比较小的数据结构,存储在栈中。但是可以使用new运算符。
C#中的结构不支持继承。
不允许定义无参数的构造函数,其是编译器默认提供的,不允许被覆盖。
23. System.Object中的方法:(感觉比较有用,但还不知道具体怎么使用?)
string ToString( )
Int GetHashTable()
Bool Equal(object obj) // 比较两个对象是否相等
Bool Equal(object objA, object objB) // 同上
Bool ReferenceEquals(object objA, object objB)//比较两个引用是否指向同一个对象
Type GetType() // 得到对象类型的详细信息
Object MemberwiseClone() // 进行对象的浅表复制???
Void Finalize() // .net版本的析构函数
************************************************
C语言与VC++的区别有很多:
1,全新的程序程序思维,C语言是面向过程的,而VC++是面向对象的。
2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而VC++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的VC++6.0中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3,特别是VC++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中VC++中的。主持人注:C语言标准中不包括图形处理。这里的C语言的图形处理指的是DOS下的C语言。
4,C和VC++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在VC++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
4,C语言可以写很多方面的程序,但是VC++可以写得更多更好,VC++可以写基于DOSr程序,写DLL,写控件,写系统。
5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而vc++对文件的组织是以工程,各文件分类明确。
6,VC++中的IDE很智能,和VB一样,有的功能可能比VB还强。
7,VC++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。
8,VC++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。
9,调试功能强大,并且方法多样。
算了。
************************************************
************************************************
************************************************
************************************************
DNA 比对,让 C# 认祖归宗
近来 DNA 一词很朗朗上口,DNA 可以用来确认失散已久的亲属,用来算男人的风流胡涂帐,也可以帮助刑案现场蛛丝马迹的鉴识。
看了金凯瑞(Jim Carrey)主演的「一个头两个大(Me, Myself & Irene)」,我很是同情他在片中的遭遇。夫妻俩都是白人,却生出三个黑宝宝,这么明显的事,连 DNA 比对都可以不用了。不过,金凯瑞依然消极地不肯承认这样的事实。
别以为这只是电影,真实世界也正在上演一段人伦悲剧。尽管诸多事实摆在眼前,还真的有人老是唤别人为亲爹,对亲爹却视而不见呢!我说的是微软新创的程序语言 C#,号称是源自 C/C++,而非「Java」。这点引起许多人的质疑,大家都认为 C# 是源自 Java。为了让 C# 认祖归宗,我特地写了这篇文章,从程序语言的 DNA 来分析他们的血缘关系。
染色体 1:纯对象导向语言
C# 和 Java 都是纯对象导向语言,C++ 非纯对象导向语言。
染色体 2:强制型态检查
C# 和 Java 都强制进行型态检查,C++ 则较宽松。
染色体 3:宏
C# 和 Java 都不支持宏,C++ 支持宏。
染色体 4:Template
C# 和 Java 都不支持 template,C++ 支持 template。
染色体 5:多重继承
C# 和 Java 都不支持多重继承,且都支持 interface,C++ 支持多重继承。
染色体 6:指针
C# 和 Java 都不支持指针,C++ 支持指针。(不过,C# 允许在 unsafe code 内使用指针)
染色体 7:内存管理
C# 和 Java 都支持垃圾收集。C++ 不支持垃圾收集。
染色体 8:虚拟机器
C# 和 Java 都需要虚拟机器,C++ 不需要虚拟机器。Java 的执行档是中间码,叫做 bytecode,透过 Java Runtime Environment(即 JRE)来执行;C# 的执行档也是中间码,叫做 managed code,透过 NGWS Runtime 来执行。除了 Java,你也可以用其它程序语言(例如 Ada、Python)来作出 bytecode。除了 C#,你也可以用其它程序语言(例如 Visual Basic、C++)来作出 managed code。
染色体 9:Namespace
C# 和 Java 都支持阶层式的 namespace,但 C++ 只支持单层的 namespace。Java 的 namespace 称为 package,C# 的 namespace 就称为 namespace。Java 和 C# 都使用「.」当作 namespace 的符号,而 C++ 使用「::」。
染色体 10:Platform-Independent Type
C# 和 Java 都使用 Platform-Independent Type,C++ 的 type 会受到平台的影响。
染色体 11:使用 Wrapper 包装基本型态
C# 和 Java 都支持将基本型态包装成对象,在 Java 叫做 wrapper,在 C# 则是叫做 box。
染色体 12:boolean != integer
C# 和 Java 都不允许把整数当布尔值用,C++ 则允许。
染色体 13:access modifier
C# 和 Java 都支持四种等级的 access modifier,包括 public、protected、private、default/internal;C++ 只支持 public、protected、private。Java 的 default(不写)指的就是只针对同一个 package 开放,正好就是 C# 的 internal。
染色体 14:变量初始化
C# 和 Java 都规定不可使用未初始化的变量,C++ 则完全没有这方面的限制。Java 和 C# 的编译器都会主动帮未初始化的 field/data member 设定初始值,C++ 则不然。
染色体 15:转型
C# 和 Java 都规定基本型态和 reference 型态不能互转。
染色体 16:数组边界检查
C# 和 Java 都会主动进行数组边界检查,C++ 则不然
染色体 17:呼叫 Native Code
C# 和 Java 都支持呼叫 native code。Java 透过 JNI(Java Native Interface);C# 透过 PInvoke(Platform Invocation Service)
染色体 18:Metadata
C# 和 Java 的中间码都包含有类别的 metadata,而 C 语言则是独立在 header file。
染色体 19:中间码指令
C# 的 IL 中间码指令和 Java 的 bytecode 指令非常类似,有的甚至一样。
染色体 20:例外处理
C# 和 Java 都支持 try/catch/finally,但 C++ 只支持 try/catch。
你觉得够多了吗?...... 我还没全部列完呢!虽然仍有部分的特色比较像 C/C++,但是大部分重要的特色都还是和 Java 一致。