why C++

来源:互联网 发布:读懂php wsdl中方法 编辑:程序博客网 时间:2024/04/29 07:08

这两天在看C++沉思录,打算输出几篇博客,用来整理自己的思绪,加深理解。这是这个序列的第一篇,是对该书序幕和第一篇的总结,主要介绍C++的优势。


1. 方便存储辅助状态

C++使用类表示抽象,类的数据成员提供了理想的状态存储空间。使用书中的例子-Trace类,我们可以方便的在类中添加noisy成员,用于控制输出的打开和关闭;可以添加f成员,用于指示输出流。

class Trace {public:        Trace() { noisy = 0; f = stdout; }        Trace(FILE *ff) { noisy = 0; f = ff; }        void print (char *s)                { if (noisy) fprintf*(f, "%s", s); }        void on() { noisy = 1; }        void off() { noisy = 0; }private:        int noisy;        FILE *f;};

 用C语言也可以实现类似的功能,我们可以把noisy和f的值用全局变量来存储。当整个系统中只有一个实例时,这种方式可以很好地工作。当需要实现两个实例,一个用于向标准输出打印,一个向文件打印时,使用全局变量就无法方便地实现,因为系统中全局变量只有一份。用C++就没有这种问题,只需要重新实例化一个Trace对象即可。

2.数据抽象

C++以库的形式提供了抽象数据类型,使用时可以把它当作黑盒处理,使用时无需考虑内存分配等实现细节,典型的就是字符串类。这样编程时可以集中精力解决问题,而不用考虑内存分配等细节问题。

C语言没有真正的字符串概念,字符串其实是字符数组,而且不支持变长数组。在这种情况下,处理长度不定的字符串,只能使用动态内存分配,使用动态内存必然又会涉及到内存管理问题。并且字符串可以被存储在数据段、栈、堆,这些存储空间的生命周期、使用方法各不相同,更加深了复杂性。

C语言也可以实现动态字符串,但是用户使用时需要遵循许多隐匿的规则,很容易出错。比如函数以动态内存方式返回结果时,调用者就必须在使用完成后手动释放内存,否则会导致内存泄漏。

3.和编程环境解耦

有的编程语言有它们自己的编程环境,作者举了几个例子,比如APL、Basic、Lisp、Smalltalk,这些语言和他们的环境高度耦合。这几种语言我都没用过,因此使用Java来理解,我们知道运行Java程序必须要有Java虚拟机,否则Java程序无法运行,Java虚拟机就是Java语言的编程环境。

C++则没有这样的限制,它在传统环境上运行。作者对传统环境的解释为,程序经过编译、链接生成可执行文件,操作系统把可执行文件读入内存,然后跳到可执行文件的第一条指令开始执行。虽然当今的操作系统各不相同,但是都支持这种环境,因此C++具有很好的移植性,可以和任何操作系统共存,甚至可以在没有操作系统的情况下,直接裸奔。由于裸奔时没有操作系统,因此得使用其他方式把程序加载到内存中,比如使用专门的硬件。


作者在第二章中还分析了抽象的好处,但是感觉这个不是C++独有的优势,因此不再这里写了。


本篇到此结束,多谢各位看官。

0 0
原创粉丝点击