C++ Primer Plus 第一章笔记

C++ Primer Plus 第一章笔记


一、C++简介

C语言代表的过程性编程 + 面向对象 + 模板支持的泛型编程。
C++复杂、自由、强大、可以方便地重用和修改现有的、经过仔细测试的代码。
C++本质复杂性:内存管理
        对象生命期
        重载决议
        模板参数推导规则
        异常
        OO和GP
OOP提供了高级抽象,C提供了低级硬件访问。

二、C++简史

1.C语言

20世纪70年代早期,贝尔实验室的丹尼斯·里奇(Dennis Ritchie)致力于开发UNIX操作系统来管理计算机资源和、处理计算机与用户之间的交互。UNIX要在不同的计算机(或平台)上工作,而汇编语言依赖计算机的内部机器语言,即直接操作硬件,如直接访问CPU寄存器和内存单元,所以说汇编语言针对于特定的计算机处理器,要将汇编程序从一台计算机移植到另一台计算机,需要重新编写汇编程序。所以不能通过低级语言汇编语言来编写UNIX操作系统。这不难想到,需要致力于解决问题并不针对特定硬件的高级语言出现。同时自然而然高级语言和低级语言需要一条通道,能够将高级语言翻译成低级语言来操作硬件,即编译器。这样,就可以使用不同的编译器在不同的平台上使用同一个高级语言程序。Ritchie希望有一种语言能将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他在旧语言的基础上开发了C语言。
图片中左侧前辈是肯尼斯·汤普森,右侧前辈是丹尼斯·里奇
后人站在了两位前辈的肩膀上前行。
在这里插入图片描述

2.面向对象OOP

C语言最初面世时也是过程性语言,强调的是编程的算法方面。早期的程序语言由于执行路径很混乱(被称为“意大利面条式编程”),出现了结果化编程,结构化编程将分支限制为一组良好的结构。C语言中包含了这些结构(for循环、while循环、do while循环和if else语句)。

虽然结构化编程的理念提高了程序的清晰度、可靠性,并使之便于维护,但在编写大型程序时,仍面临着挑战。面向对象编程OOP理念是设计与问题本质对应的数据格式。 OOP不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。

3.泛型编程

泛型指的是创建独立于类型的代码。
C++模板提供了只编写一个泛型(即不是特定类型)函数,并将其用于各种实际类型的机制。

交换两个值的函数模板:

#include<stdio.h>
template<typename AnyType>
void Swap(AnyType& a, AnyType& b){
    AnyType temp;
    temp = a;
    a = b;
    b = temp;
}

int main(){
    int m = 11;
    int n = 22;
    double e = 33.33;
    double f = 44.44;
    Swap(m, n);
    Swap(e, f);
    printf("m: %d n: %d e: %f f: %f", m, n, e, f);

输出结果:
在这里插入图片描述

4.C++起源

20世纪80年代,本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)在贝尔实验室开发出了C++语言。用他自己的话来说,“C++主要是为了我的朋友和我不必再使用汇编语言、C语言或其他现代高级语言来编程而设计的。它的主要功能是可以更方便地编写出好程序,让每个程序员更加快乐。”
在这里插入图片描述

三、可移植性和标准

假如编写了一个运行在Window2000的老式奔腾PC的很好用的C++程序,在不同平台(不同的操作系统和处理器)上运行,如果不修改代码的情况下,重新编译程序后,程序运行良好,则该程序是可移植的。
在可移植方面有两个障碍,其中一个是程序依赖硬件。解决办法是将依赖于硬件的部分放在函数模块中,最大限度地降低可移植性问题,这样只需重新编写这些模块即可。
可移植性的第二个障碍是语言上的差异。美国国家标准局(ANSI)在1990年成立了一个委员会,专门负责制定C++标准(ANSI制定了C语言标准)。国际标准化组织也加入了这个行列,创建了联合组织ANSI/ISO,致力于制定C++标准。制定出了一个国际标准ISO/IEC 14882:1998,并于1998年获得ISO、IEC和ANSI的批准。该标准常被称为C++98,它不仅描述了已有的C++特性,还对该语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL)。

总结

我认为单纯比较编程语言的好坏是无趣没有意义的,比如说哪门语言是天下第一。而根据使用场景说哪门语言更适合,使用起来更得心应手是合理的。C++给我最大的感觉就是自由,我喜欢这种自由。并且C++尽可能是C语言的超集,硬件访问能力和效率结合操作系统学习可以知其所以然。

引用:书籍C++ Primer Plus(第6版)中文版 第一章
引用:C++相比c语言的复杂性 https://www.jianshu.com/p/d43588637d90?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值