从C到C++
—《C++语言的设计和演化》读书笔记(3)
不能说哪种语言取代了哪种语言,只是一种新语言的出现必然伴随着她的新的特征。从C到带类的C,再到C++,逐渐形成了一些新的语言特征:
1.虚函数
让C++高度抽象成为现实。也就是说我们不必关心派生类真正要去做的是什么事情,我们在父类中只定义了函数接口,把具体实现延迟到派生类中。这样做的好处是显而易见的,就像书中提到的一个例子:父类中定义了一个接口draw(),以后不管派生类要怎么“画”,只要在派生类内部定义了draw(),指定了自己“画”的行为,就可以沿着继承的层次关系找到派生类的draw(),尽管表面上看是调用父类的draw()。这样就能通过使用虚函数实现模块化。坏处就是使编译器的实现越来越困难了,其生成的代码也会变的相对庞大,以及效率上的影响。
2.重载
重载让语言变的简洁。一是使一些有相同含义的函数可以以相同的名字出现,区别就在于参数和返回类型;二是使用户自定义类型可以模拟内建类型的操作方式。在效率上,似乎对我们来说没什么影响:)
3.常量
尽量用const和inline而不用#define,这就是C++与C的区别。为什么要这样?我想<<Effective C++>>中条款1已经说的很清楚了。
4.存储管理和类型检查
这些都使得C++更加安全,<<Effective C++>>也有关于这两方面的论题。
5.声明语句
我觉得这是一个很大的改进,尽管Bjarne认为这是次要特征。学习C语言是,总是为变量没有声明而再回到函数开头去声明变量。关键还在于对临时变量空间的回收,这点好象在林锐博士写的<<高质量C++编程指南>>中提到过。
分享到:
相关推荐
- **《C++的设计与演化》**(The Design and Evolution of C++)— Bjarne Stroustrup - **简介**:这本书由C++语言的创造者Bjarne Stroustrup撰写,深入介绍了C++的起源、设计原则以及发展历程。 - **学习建议**...
数据密集型应用系统设计-读书笔记 第一章:构建可靠性、可扩展性、可维护性的应用 第二章:数据模型与查询语言 第三章:存储与检索 第四章:编码与演化 第五章:分布式数据 第六章:复制 第六章:分区 第七章:事务 ...
第1章 对象的演化 一、多态性的解释: 当处理类型层次结构时,程序员常常希望不把对象看作是某一特殊类型的成员,而把它看作基本类型成员,这样就可以编写不依赖于特殊类型的代码。在形体例子中,函数可以对一般形体...
这是一个关于三维图形程序设计的课程作业,包含了C++语言编写的源代码以及一个SLN解决方案文件。这个压缩包是学习和实践三维图形编程的理想资源,适用于对C++和3D图形感兴趣的初学者或进阶者。 C++是计算机科学中...
高级语言的代表如Java、C、C++等,提供了丰富的抽象和强大的数据结构,极大地提高了开发效率和程序的可维护性。 在当前的软件开发实践中,高级语言已经成为主流。它们具有跨平台、面向对象、具有丰富的库支持等特性...
笔记介绍了常见的设计模式和设计原则,如单一职责原则、开闭原则等,以提高代码的可读性和可维护性。 四、编程与实现 编程阶段是将设计转化为实际代码的过程。笔记中可能会涵盖主流编程语言(如Java、Python或C++)...
Java学习笔记主要涉及Java语言的历史背景、语言特点、应用平台和学习建议。以下是对这些内容的详细解析: ### Java语言的历史背景 Java起源于1990年代初的Sun公司(现为Oracle公司的一部分)的“绿色项目”计划,...
12. 语言发展史:冯·诺依曼是计算机的发明者,阿达是第一个写程序的人,C++、C# 等语言的演化过程。 13. 编译器的好坏标准:编译器的好坏有三个标准:速度、体积和编译时间。 14. 变量的概念:变量是对地址的...
此外,本书的最后一章提供了一个轻松易懂的C++语言教程,旨在帮助读者掌握这门从C语言演化而来的日益流行的编程语言。内容涵盖了应用于PC和UNIX系统上的ANSI标准C语言,详细描述了与UNIX平台复杂硬件结构相关(如...
- **起源与发展**:C#语言的发展历程从C语言逐步演化而来,经过C++的阶段,并借鉴了Java的一些特性,最终形成了C#这一现代编程语言。C#特别强调安全性、简洁性和面向对象编程特性,适用于开发Web应用和移动应用。 -...
【读码笔记】是关于计算机科学与信息技术领域中一项基础且重要的技能——代码阅读的记录。在编程过程中,理解并能有效地阅读他人的代码是一项必不可少的能力,尤其在维护现有项目、学习新框架或库,以及协作开发时。...
《微磁模拟软件OOMMF教程笔记》 OOMMF(Object-Oriented MicroMagnetic Framework,面向对象的微磁框架)是一款由美国国家标准与技术研究所(NIST)开发的开源微磁学模拟软件。该软件旨在为研究微磁现象提供一个可...
《数值算法笔记资料(曹奇英)》是东华大学曹奇英教授关于数值计算方法的一份详实学习资源,包含pdf文档、手抄版笔记和教学手册,非常适合自学和深入理解数值算法。这份资料全面涵盖了数值计算的核心概念、算法原理...
- GCC简介: GCC是GNU Compiler Collection的缩写,是一套用于编译多种编程语言(如C/C++等)的工具集合。 - 功能: 编译、链接等。 - 平台支持: 跨平台支持多种硬件架构。 - 影响力: 在自由软件领域具有重要地位...
3. **系统分析与设计**:涵盖软件设计原则、设计模式、UML统一建模语言的应用,以及结构化设计和面向对象设计方法。 4. **软件构造**:讨论编程规范、代码质量保证、版本控制(如Git)、集成开发环境(IDE)的使用...
的设计和演化”中给出: 初始化后无法更改引用所指的内容。 也就是说,一旦 C++ 引用被初始化,以后就不能再引用不同的对象; 它不能重新绑定。 我过去曾被 Algol68 引用所困扰,其中 r1=r2 可以通过 r1 分配给引用...
3. **软件设计**:概要设计和详细设计,如结构化设计、面向对象设计等,可能涉及到UML图的使用。 4. **编程语言与编程范式**:讨论至少一种或多种编程语言,如Java、Python、C++,以及面向过程、面向对象和函数式...
在学习和使用编程语言如C或C++时,掌握不同的命名规则对于成为一名优秀的程序员是非常重要的。了解匈牙利命名法的真正含义以及它与现代开发实践之间的差异,有助于程序员更好地理解历史上的编程习惯和约定,同时也...
4. **编程语言**:根据课程内容,可能会涉及一种或多种编程语言,如Java、C++或Python,测试对语法、控制结构和异常处理的理解。 5. **版本控制**:Git或其他版本控制系统的基本操作,如提交、分支、合并和解决冲突...
4. 文档研究:查阅任何可用的文档,包括设计文档、用户手册、开发者笔记等,以了解代码的设计意图和实现细节。 5. 功能测试:运行代码并进行功能测试,以确认其当前状态和功能表现。 6. 性能分析:分析代码的性能...