外观
01.C++的意义、C->C++
约 1911 字大约 6 分钟
数据结构算法C++编程语言
2022-06-15
一、学习C++的意义
0、一些历史
- UINX操作系统诞生之初是直接用汇编语言写成的;
- 随着UINX的发展,汇编语言的开发效率成为一个瓶颈;
如何提高UNIX的开发效率???
- 1971年,Ken Thompson和Dennis Ritchie对B语言进行了改良,使其能够直接产生机器码,C语言诞生
- UNIX开始用C语言重写,同时C语言在实践的过程中得到发展
1、C语言的特点
- C语言是在实践的过程中逐步完善起来的
- 没有深思熟虑的设计过程
- 残留量过多低级语言的特征
- C语言的目标是高效
- 最终程序执行效率的高效
2、软件方法论的发展
面向过程程序设计:数据结构+算法
主要解决科学计算问题,用户需求简单而固定
特点∶
- 分析解决问题所需要的步骤
- 利用函数实现各个步骤
- 依次调用函数解决问题
问题∶
- 软件可重用性差
- 软件可维护性差
面向对象程序设计∶由现实世界建立软件模型
- 将现实中的事物直接映射到程序中,可直接满足用户需求
- 特点︰
- 直接分析用户需求中涉及的各个实体
- 在代码中描述现实世界中的实体
- 在代码中关联各个实体协同工作解决问题
- 优势:
- 构建的软件能够适应用户需求的不断变化
- 直接利用面向过程方法的优势而避开其劣势
3、C语言的加强
当面向过程方法论暴露越来越多的缺陷的时候,业界开始考虑在工程项目中引入面向对象的设计方法,而第一个需要解决的问题就是︰高效的面向对象语言,并且能够兼容已经存在的代码。

- C语言和C++并不是对立的竞争关系
- C++是C语言的加强,是一种更好的C语言
- C++是以C语言为基础的,并且完全兼容C语言的特性
学习C++并不会影响原有的C语言知识,相反,学习C++可以让我们学到更多的软件设计方法。
4、学习C++的优势

C++兼容C语言的特性,C++保留了过多的低级语言的特性,java语言之父出现了,通过剪裁C++,使得JAVA更加纯正的面向对象,语法也更简单,
但是java是半编译型语言,需要虚拟机运行,使得java效率比起C/C++低很多。java取得巨大的成功。因此,微软想要java控制权,一直没争取过来,微软一怒之下,
就发明了C#,可以和java基本是一模一样,所以二者是竞争对手。缺陷是运行效率低,都是半编译型,优点是语法特性好,开发效率高,此时D语言应运而生。
对于脚本语言,java是半编译,编译后才能运行,运行效率也不高,此时出现好用、开发效率高、不需要编译,直接运行的解释型语言。
5、现代软件产品架构图

商场银行收银系统架构图

6、现代软件产品的特性
- 系统一般是由多种语言写成的
- 系统架构的目标是拥抱用户需求的变化
- 系统拥有较好的移植性
- 系统能够方便的部署和更新
操作系统的修改和驱动程序的开发在现代软件产品中占据的比重越来越小。
7、学习C++的意义
- C++是一种更强大的C ,通过学习C+ +能够掌握更多的软件设计方法
- C+ +是Java/C#/D等现代开发语言的基础,学习C+ +后能够快速掌握这些语言
- C++是各大知名软件企业挑选人才的标准之一
8、小结
- 所有的软件系统都是为了满足用户需求而开发的
- 对于一个开发团队而言,在短期内开发出用户满意的软件系统是其核心竞争力的体现
- 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现
- 对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是其核心价值的体现
二、C到C++的升级
1、C与C++的关系
- C++继承了所有的C特性
- C++在C的基础上提供了更多的语法和特性
- C++的设计目标是运行效率与开发效率的统一

C++更强调语言的实用性
所有的变量都可以在需要使用时再定义
register关键字请求编译器将局部变量存储于寄存器中
- 在C++中依然支持register关键字
- C++编译器有自己的优化方式
- C语言中无法获取register变量的地址
- C++中可以取得register变量的地址
C++中的register关键字
- C++编译器发现程序中需要取 register 变量的地址时,register 对变量的声明变得无效。
- 早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
在C语言中,重复定义多个同名的全局变量是合法的
在C++中,不允许定义多个同名的全局变量
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
struct关键字的加强
- C语言中的struct定义了一组变量的集合
- C语言中struct定义的标识符并不是一种新的类型
- C++中的struct用于定义一个全新的类型

面试中的小问题
- int f()与int f(void)有区别吗?如果有区别是什么?
- 在C语言编译器中,有区别,前面函数类型返回值为int,参数无数多。后面函数类型返回值为int,没参数。
- 在C++编译器中,没区别,返回值为int,无参数。
- int f()与int f(void)有区别吗?如果有区别是什么?
C++ 中所有的标识符都必须显示的声明类型
C语言中的默认类型(int)在C++中是不合法的
在C语言中
- int f()表示返回值为int ,接受任意参数的函数
- f(void)表示返回值为int的无参函数
在C++中
- int f()和int f(void)具有相同的意义
- 表示返回值为int的无参函数
2、小结
- C++ 更强调实用性,可以在任意的地方声明变量
- C++ 中的register只是一个兼容的作用
- C++ 编译器能够更好的进行优化
- C++ 中的任意标识符都必须显示的指明类型
