C++的认识

1 前言

本人编写该文章的目的在于顽固已所学过的C++知识,有些关键点是提取于《C++ PrimerPlus 》。文章中还加入一些本人的见解及网上的一些链接。

2 认识C++

C++属于C语言的超集,是一门类似于C语言的高级编程语言。C++语言容纳了好几种编程范式,其中包含面向对象编程、泛型编程以及传统的过程化编程(C语言的编程范式)。有些OOP正统派把C添加OOP的特性看作为猪插上翅膀,虽然头瘦骨嶙峋但是是非常能干的猪。OOP 面向对象编程的缩写
C++在C语言中新添的特性有:

  • 类和对象;
  • 继承;
  • 多态;
  • 虚函数和RTTI(运行阶段的类型识别);
  • 函数重载;
  • 引用变量;
  • 泛型(独立于类型的编程,这种技术是由模板和标准模板库STL提供);
  • 处理错误条件的异常机制;
  • 管理函数
  • 类和变量名的名称空间;

完整程序的于数据结构加算法。数据:即硬件能识别和处理的信息,算法:编写程序时使用的方法。好的算法是非常重要的,可以降低硬件的工作量

2.1 面向过程性编程

C语言和C++的区别在于C语言强调的是算法方面。即过程,把复杂的程序划分为小型的易于编写的模块。像汽车生产商,一部分负责生产轮子和汽车框架以及发动机,一部分负责汽车的最后组装。C语言鼓励程序员开发程序单元(函数)来表示各个任务模块。C语言属于结构化编程语言。

2.2 面向对象编程

虽然结构化编程的理念提高了程序的清晰度、可靠性、并使之便于维护,但它在编写大型程序时仍面临着挑战。为应付这种挑战,OOP提供了一种新方法。与强调算法的过程性编程不同的是,OOP强调的是数据。OOP不像过程化编程那样,试图使问题满足语言的过程性方法,而是让语言来满足问题的需求。其理念是设计与问题的本质特性相对应的数据格式。
在C++中类是一种规范,它描述了这种新型数据格式,对象是根据这样的规范构造的特定数据结构。例如上帝以人类(类)这样的规范构造出了人(对象)。

2.3 泛型编程

泛型编程是C++支持的另一种编程模式,它与OOP的目标相同,即使重用代码和抽象通用概念技术更简单。不过OOP强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。
C++也是在贝尔实验室诞生的,Bjarne Sronstrup于20世纪80年代在这里开发了这种语言。Sronstrup比较关心的是让C++更有用,而不是实施特定的编程原理或风格。
C++是C语言的超集,这意味着任何有效的C程序的是有效的C++程序。它们之间有些细微的差别但无足轻重。
该重点源于第1章 预备知识的1.2小节 C++简史

2.4 可移植性和标准

如果在不修改代码的情况下,重新编译后程序将运行良好,则该程序是可移植的。可移植性方面存在两个障碍,一个是硬件。不同硬件程序之间是存在差异的,如CPU的微指令集,硬件的驱动方式(将依赖于硬件的程序独立放在函数模块中可以最大限度降低硬件之间的可移植性问题;只需重新编写该函数模块即可)。第二个障碍是语言语言上的差异。计算机语言也可能出现方言,如Widows XP C++的实现和Red Hat Linux和Machtosh OS X相同吗?

2.4.1 标准

C++的第一个国际标准ISO/IEC 14882:1998,于1998年获得了ISO (国际标准化组织)、IEC(国际电工委员会)和ANSI的批准。该标准称为C++98,它不仅描述了已有的C++特性,还对语言进行了扩展,添加了异常、运行阶段的类型识别(RTTI)、模板和标准模板库。
2003年,发布了C++第二版(ISO/IEC 14882:2003)这个新版本是一次技术性修订,这意味着它对第一版进行了整理——修订错误、减少多义性等,但没有改变语言的特性。这个版本也常被称为C++03或C++98/2003。
ISO委员会于2011年8月批准了新标准 ISO/IEC 14882:2011,该标准以前C++11和C++98一样,C++11也添加了众多特性。
ANSI C加入了C++首次引入的一些特性,如函数原型、类型限定符const。
C标准C99,ISO/IEC分别于1999和2000年批准了该标准。该标准在C语言中添加了一些C++支持的特性,如新的整型。
其它新发布的C/C++标准没有提到
该重点源于第1章 预备知识的1.3小节 可移植性和标准
转载于知乎编程指南的C/C++标准再此非常感谢作者

2.5 文件

C++文件由文件名(用户起的有一定意义的名称)和扩展名(特定功能的后缀符号如.txt)组成。不同系统的文件名表示范围也有限制,如一些老式计算机系统表示范围只限前8个字符。现在的系统我们不必担心这样的问题。扩展名是由系统或软件规定的符号,只有这样,系统才知道该文件所代表的含义。
如在Widows 下 .c 代表C语言源文件,.cpp代表C++文件。
源文件的扩展名如下所示

C++的实现源代码文件的扩展名
UNIXC、cc、cxx、c
GNU C++C、cc、cxx、cpp、c++
Digital Marscxx、cpp
Borland C++cpp
Watcomcpp
Microsoft Visual C++cxx、cpp、cc
Freestyls Code Warriorcp、cc、cxx、cpp、c++

该重点源于第1章 预备知识的1.4小节 程序创建的技巧

2.6 编译

C++属于高级编程语言,C++编写的原文件是一种文本文件硬件无法直接识别,需要经过一种叫编译器的程序才能转换成硬件能识别和执行的机器语言代码。编译器转换成机器语言流程如下所示。
编译器的处理流程

扩展文件
汇编语言文件
预处理
编译
汇编

整体的处理流程

.cpp
.o
.exe
源文件
编译器
链接器
可执行代码
库代码文件
启动代码文件

Linux下的常用文本编辑器和代码编译器:vi,gcc
windows下的集成开发环境(IDE)和代码编译器:Microsoft Visual C++和 gcc
在编写C++程序文件的时候可以用常用的文本编辑器编写如 vi,再用相应的语言编译器生成硬件能识别的机器代码文件像gcc
还有一种称为IDE,即集成开发环境。这类软件是把文本编辑和语言编译器相互结合在一起了,里面还添加了些实用功能,如调试、设置断点等等。用户在里面编写调试程序,极大缩短了开发周期。像微软的IED Microsoft Visual C++现在已经更新到 Microsoft Visual C++ 2022版本
Microsoft Visual C++ 介绍

小结

(1)C++在C语言上添加的特性
(2)C++的可移植性和语言标准
(3)C++文件生成机器可识别的代码流程
(4)常用的编译环境

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值