批处理 复制目录:请问 C C++ C#是什么区别?C和#不是相同的吗?有什么不同?哪一个是最初级的?

来源:百度文库 编辑:高考问答 时间:2024/04/28 17:59:33
谢谢大家帮忙

这3个语言完全是不同的三门语言:
1.C++和C是非常接近的,因为早期C++的实现是靠一个翻译器把C++的代码翻译成C代码再经过C编译器编译得到程序,经管后来C++编译器已经重新写过,但是前者对后者在语法上是基本兼容的.
2.C#是MS的.net计划中占核心的一门全新语言,采用托管技术的C#能够应用.net的所有功能和类库.
3.造成初学者感觉混淆的是三门语言语法都很相象,其实如果深入下去,会发现三个语言完全是独立的,如果你需要学习C#和C++.可以直接学习而不建议你先学习C.由于C和C++的语言相似性,可能你有C的基础对C++的东西要容易理解一些,但是通常的情况是:1个对C精通的程序员学习C++的学习曲线要比一个开始就学C++的程序员长的多,2者区别在于构建软件的方法和体系的差距.至于C#,如果有点JAVA的基础,你会发现一切是那么的美好呵呵(从这点也能看出MS的手段有时候的确是很厉害的~)

HttpWebRequest在C++中的用法

Dim httpReq As System.Net.HttpWebRequest 'HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持',也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。
Dim httpResp As System.Net.HttpWebResponse ' HttpWebResponse 类用于生成发送 HTTP 请求和接收 HTTP 响'应的 HTTP 独立客户端应用程序。
Dim url as String="网页地址"
Dim httpURL As New System.Uri(url)
httpReq = CType(WebRequest.Create(httpURL), HttpWebRequest)
httpReq.Method = "GET"
httpResp = CType(httpReq.GetResponse(), HttpWebResponse)
Dim reader As StreamReader = _
New StreamReader(httpResp.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312")) '如是中文,要设置编码格式为“GB2312”。
Dim respHTML As String = reader.ReadToEnd() 'respHTML就是网页源代码
httpResp.Close()

与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# 中,在对象的构造函数执行之前对象的类型信息就已经初始化好了,所以可以进行正常的虚函数调用。
转载