2017年非现役文职招聘:C#能做的事C++都能做到吗?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/25 22:29:56
好象C#是从C++衍生的,C#能做的事C++都能做到吗?
比如C#有个HttpWebRequest,C++怎么用

先回答你后面一个问题:
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# 中,在对象的构造函数执行之前对象的类型信息就已经初始化好了,所以可以进行正常的虚函数调用。

基本上,这些就是两者之间的区别,有什么问题你可以跟贴,我会尽量帮助你。^-^

那就没有人学C#了