重读C++primer 第三版(一)

来源:互联网 发布:go会取代python吗 编辑:程序博客网 时间:2024/04/29 13:50

最近不是很忙,准备重新温习一遍C++primer 第三版,并将重点记录在此,方便翻阅,希望能坚持写完。

之前一直搞错成第四版了,难怪有同学在群里说和他看到的不一样。第四版重新对章节进行了整理,并且对一些底层的内容做了舍弃,加重了标准库的介绍,个人觉得对于有一定C/C++使用经验的人一说,底层内容还是比较重要的。
第一部分

主要内容为第一篇 C++概述

1,procedural programming和object based programming,过程化程序设计的特点是一个问题可直接由一组算法来建立模型,数据和算法独立存储,而面向对象程序设计则是通过一组数据抽象来建立问题的模型,它通过inheritance和dynamic binding扩展了抽象数据类型(abstract data type)。

2,C++支持面向过程和面向对象的程序设计方法,这样的好处是对于不同的问题,能提供最合适的解决方案,也就是说,用正确的工具,做适合的事情。

3,几个有用的预处理器:__cplusplus(表示这是C++程序)、__STDC__(表示这是标准C程序)、__LINE__(当前行号)、__FILE__(当前源文件名)、__DATE__(当前文件被编译的日期)、__TIME__(当前文件被编译的时间)。

4,由于在各种C++实现中,头文件的后缀各有不同,因此,标准C++头文件没有指定后缀。C库头文件的C++名字总是以C开头,后面是去掉后缀.h的C名字。

5,操作符在iostream上执行的是一个操作,而不是简单地提供数据,比如,在标准输出上插入一个换行符,并刷新输出缓冲区,我们一般用cout<<endl;而不是cout<<"\n";这是因为,endl会调用flush函数来刷新输出缓冲区。

6,C++中的数组。C++对数组类型提供内置支持,但这种支持仅限于用来读写单个元素的机制,C++不支持数组的数据抽象,也不支持对整个数组的操作,并且数组本身没有“自我意识”,例如,它不知道自己的长度。这是因为,数组是C++从C继承而来,它反映了数据与其对应的操作算法的分离,而这正是面向过程程序设计语言的特征。C++其实是比较不推荐使用数组的。可以使用顺序容器来替换。
7,在C++中指针的主要作用是管理和操作动态分配的内存,和数组类似,C++不推荐使用指针,而是用迭代器来代替。因此,在C时代,数组+指针的使用方式在C++里可以用容器+迭代器来替换。

8,动态与静态内存分配的区别。A,静态对象在编译器编译程序源代码的时候分配,而动态对象则是在程序运行时分配。静态对象有名字,我们可以直接对其操作,而动态对象没有名字,我们通过指针间接对它进行操作。B,静态对象的分配和释放由编译器自动处理,不需要程序员干预,而动态对象则由程序员显式地管理,比较容易出错。使用不同的内存分配方式,要基于效率和灵活性的平衡准则。

9,在类定义中定义的函数会被自动当成是内联函数,此外,可用inline关键字显式地要求一个函数被视为内联函数。但是要注意,inline只是一种请求,而不是一种保证,编译器可以忽略这个请求。

10,在类中,对于非虚函数的调用,编译器在编译时刻选择被调用的函数,而虚函数调用的决定则要等到运行时刻。在执行程序内部的每一个调用点上,系统根据被调用对象的实际基类或派生类来决定调用哪一个虚函数。

11,名字空间别名(namespace alias)允许用一个更容易识别的名字和名字空间关联起来,并且可以重新对这个名字进行赋值,以关联到 别的名字空间。如果在同一个别名下用了相同名字的成员,则要保证在不同的名字空间下相同的成员。如:namespace MYLIB=MyNamespace_For_Test;

12,标准库提供的泛型算法集可以作用于内置数组指针对上面,如:

        int ia[7] = {4,6,8,1,9,7,6};

        对整个数组排序
        sort( ia, ia+7 );
        只对前四个元素排序
        sort( ia, ia+4 );

原创粉丝点击