C++ Primer读书笔记

本文介绍了C++编程语言的关键特性,包括预处理器宏、输入输出流、内存管理、内联函数、静态数据成员等概念,并探讨了面向对象编程中的继承与多态实现,以及模板、异常处理和泛型算法的应用。

1、             编译C++程序时编译器自动定义了一个预处理器名字__cplusplus 注意前面有两个下划线因此我们可以根据它来判断该程序是否是C++程序以便有条件地包含一些代码;在编译标准C 时编译器将自动定义名字__STDC__

2、             另外两个比较有用的预定义名字是__LINE____FILE__ __LINE__记录文件已经被编译的行数__FILE__包含正在被编译的文件的名字

3、             另外两个预定义名字分别包含当前被编译文件的编译时间__TIME__ 和日期__DATE__

4、             C++ :  #include <cassert> ; using namespace std;

C: #include <assert>

5、             输入输出:#include <iostream>cout   cin  cerr  endl

6、             文件输入输出:#include <fstream>

打开一个输出文件 ofstream outfile( "name-of-file" );

打开一个文件供输入 ifstream infile( "name of file" );

7、             C++中对象可以静态分配——即编译器在处理程序源代码时分配也可以动态分配——即程序执行时调用运行时刻库函数来分配;

8、             int *pint = new int( 1024 );      delete pint;

int *pia = new int[ 4 ];            delete [] pia;

9、             一般来说函数调用比直接访问内存的开销要大得多,因而信息隐藏是否给程序的执行效率增加了严重的额外负担或许是阻碍性的负担呢?幸运的是在一般情况下回答是不.C++提供的解决方案是内联函数inline function 机制内联函数在它的调用点上被展开,一般来说内联函数不会引入任何函数调用。

10、        被声明为static 的数据成员是一类特殊的共享数据成员,无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份,这是在类的所有对象之间共享数据的一种方式。

11、        在类的保护区域内的数据成员和成员函数不提供给一般的程序,只提供给派生类,放在基类的私有区域内的成员只能供该类自己使用,派生类不能使用。

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

13、        面向对象程序设计的另一个较为深入的方面是,在程序执行过程中任意一个点上我们都能够查询某类的引用或指针所指向的实际类型,这是由RTTI 运行时刻类型识别设施提供的。

14、        C++的模板设施提供了一种机制,它能够将类成函数定义内部的类型和值参数化。这些参数在其他方面不变的代码中用作占位符,以后这些参数会被绑定到实际类型上可能是内置的类型也可能是用户定义的类型。

15、        类模板的成员函数会怎么样呢?不是所有的成员函数都能自动地随类模板的实例化而被实例化,只有真正被程序使用到的成员函数才会被实例化,这一般发生在程序生成过程中的一个独立阶段。

16、        // elemType 变成了char Array<char> ca(array_size);

// elemType 变成了int Array<int> ia(array_size);

// elemType 变成了double Array<double> da(array_size);

17、        如果异常机制按照函数被调用的顺序回查每个函数直到main()函数仍然没有找到处理代码,那么它将调用标准库函数terminate(),缺省情况下terminate()函数结束程序。

18、        一种特殊的能够处理全部异常的catch 子句如下:

catch( ... )

{

// 处理所有异常虽然它无法

// 访问异常对象

}

我们可以把它看作是一种捕捉所有异常catch-all catch 子句

19、        名字空间别名namespace alias 允许用一个可替代的短的或更一般的名字与一个现有的名字空间关联起来例如

// 提供一个更一般化的别名 namespace LIB = IBM_Canada_Laboratory;

// 提供一个更短的别名 namespace DFA = Disney_Feature_Animation

20、        for ( int ix = 0; iter != vec.end(); ++iter, ++ix )

*iter = ix;

21、        能够应用到向量上的操作惊人地多但是它们并不是作为vector 类模板的成员函数提供的它们是以一个独立的泛型算法集的形式由标准库提供下面是一组可供使用的泛型算法的示例

l        搜索search 算法find() find_if() search() binary_search() count()count_if()  

l        关系Relational 算法equal() min()max()

l        分类排序sorting 与通用排序ordering 算法sort() partial_sort() merge() partition() rotate() reverse()random_shuffle()

l        删除deletion 算法unique()remove()

l        算术numeric 算法accumulate() partial_sum() inner_product()adjacent_difference()

l        生成generation 和变异mutation 算法generate() fill() transformation() copy()for_each()

22、        bit 是含有0 1 值的一个单元;

23、        C++语言提供了一套位操作符以支持位操作以及一个位集合bitset 容器类型可以用来声明含有位集合的对象

24、        字节byte 和字word, 通常一个字节由8 位构成,而一个字由32 位构成或者说是4个字节     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值