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++独有的优势,因此不再这里写了。
本篇到此结束,多谢各位看官。
- Why C++?王者归来
- Why C++? 王者归来
- Why C++? 王者归来
- Why C++? 王者归来
- Why C++?王者归来
- Why C++? 王者归来
- Why C++? 王者归来
- Why C++?王者归来
- Why C++?王者归来
- 酷壳网陈皓:Why C++?王者归来
- 酷壳网陈皓:Why C++?王者归来
- Why ?
- why?
- why?
- why
- why?
- why
- Why?
- 加值电话平台 呼叫转接加盟 声讯电话加盟
- API之NSDictionary的常见用法
- iOS中Block介绍
- 连号区间数
- Splay
- why C++
- final、finalize、finally
- android drawable打造圆形,圆角图片
- 使用触发器记录数据库删除操作
- CPP基础1
- 如何实现在cmd输入中文
- 【Android开发经验】Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- Android设备上opencv开发:获得Camera数据
- arm 自制OS