关于计算机编程的一点理解(6)

10.C++的一些其他东西


   C++恐怕是最复杂的高级计算机语言了,估计精通的人不多。我也只是了解一二,也不晓得以后用不用的着,都写在这里备忘。


   a.函数重载(Overload)和模板(Template)


   我们知道C中的函数,可以传入一定数量的固定类型的参数,但是函数名是不允许相同的。C++的函数可以同名,叫做重载,这样可以写几个同名函数,接收不同参数类型。另外,C中的函数的参数的类型是固定的,参数值可以变,但是C++更进一步,来了个模板,它的参数就是类型,只要传入的类型支持一些共性,就可以传入一段代码(可以是类,函数)生成不同的类和函数。采用虚函数和继承可以让一段代码处理具有继承关系的多个类的实例,但是是类型不安全的,但是采用模板却是类型安全的。比较头疼的就是模板写起来比较复杂,不便于调试。


    b.C++的库


  C++不比C#,Java有一个涵盖全局的庞大标准类库,以至于很多人对什么是语言什么是库都有点混淆,但是功能强大的标准库带来的方便性是不言而喻的。这一点确实是C++的一大缺陷,当然C++的第三方库是很多的,比较有名的如MFC,OWL,wxWidgets还有跨平台的QT(个人认为这个不错,被诺基亚买了,现在据说可以运行在诺基亚手机上)。不过这些都不是标准库,因而不是编译器自带的。


     C++标准库提供了文件操作以及STL还有常用的string类等。STL由容器和算法组成,采用模板实现,算法和容器时分离的,用起来相当方便。由于是标准库在任何符合标准的C++编译器上都有实现,程序可移植性很强。除此之外还有一个很有名的库,可以称作后备标准库,叫做Boost也是模板实现的,提供很多东西,比如智能指针之类的。这两个库都不能做图形界面。


     由于C++和C的兼容性,而操作系统的API都是用C语言提供的,所以,在C++中使用操作系统API自然是很直接的,只要包含头文件,并有相应的动态链接库就行(这些链接库由于系统本身使用,自然是现成的)。在windows上的运行的程序一般是图形界面的,要想做个图形界面其实有很多方法,比如:直接用WinAPi 中的GDI函数,或者用上面提到过的入MFC,OWL,wxWidgets,或者GTK/GTK+(GNOME桌面就是用这个写的)还可以调用其它语言的接口,比如python等等。


     c.运行时类型识别(RTTI)和异常处理(Exception Handling)


     这两项功能是在C++后期引入的,是高级功能,C在语言级别是不提供这些玩意儿的。RTTI(Run-Time Type Identification)使得程序在运行时可以判断对象的类型,C++有typeid和dynamic_cast操作符。编写程序时,程序总是可能出现各种错误和异常,比如读文件时文件不存在,除数是0,以及程序错误造成的溢出等。C中通常通过返回错误码的方式来返回错误信息,所以调用一个函数,需要编写一长串的if...else if...来判断返回值,进行与程序正常逻辑相关性不大的出错处理,极大的影响可读性。在C++中只需要把有可能出问题的代码用try块包含,再在代码块外部catch所需的异常,使得程序一目了然。在Java,C#这些语言中都提供这种支持,除此之外还提供像反射(Reflection)这样的更全面的RTTI支持。


     当然提供这些支持是会影响语言复杂度,降低程序运行效率的,所以在C++这种可以进行底层操作的语言中引入这些功能,曾被人抵制。不过,不要紧,编译器提供选项来关闭和开启这些功能支持。


     d.C++的编译器


     C++的编译器很多,以前很出名的有Borland的Turbo C++和Borland C++。现在,最出名的有Microsof Visual C++中的vc编译器,vc6不是很标准,vc8已经非常标准了,vc10号称最标准的C++编译器,已经支持最新标准C++0x了。开源领域的最牛逼的C++编译器自然是GNU C Complier(GCC)了,支持各种语言C\C++\Java...,Linux操作系统自带这种编译器,当然也可以用它Win版本来编译Windows程序,命令行是g++。






  关于C、C++就写到这里了,想到新的再加。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值