本学习笔记是C++ primer plus(第六版)学习笔记。是C++学习笔记(1)的后续。复习C++基础知识的可以瞄瞄。

转载请注明出处http://www.cnblogs.com/zrtqsk/p/3878593.html,谢谢!如下。

第五章

1、for循环——for(initialization; test-expression; update-expression) body  // test-expression 会被转换为bool,0为false,非零为true

2、表达式——表达式是值或值与运算符的组合。赋值表达式的值为其左侧成员的值,而赋值运算符是从右到左结合的。

3、a++和++a——

  (1)对于内置类型,两种执行效率相同。

  (2)若重载运算符,对于类而言,前缀将值加1,返回结果;后缀会复制一个副本,加1后返回副本。所以前缀比后缀效率高。

4、逗号运算符——

  (1)for循环中,将多个表达式合并为一个:  i++, j++;

  (2)声明:  int i , j;

  (3)逗号表达式先计算第一个表达式,再计算第二个表达式。逗号表达式的值是第二部分的值。

  (4)逗号表达式是优先级最低的表达式。

5、strcmp()——比较两个字符串。接受2个字符串地址A、B作为参数。AB相同返回0,A的字母顺序在B之前,者返回负数,否则返回正数。

  (用引号括起的字符串常量是其地址。)

6、clock()——返回程序开始执行后所用的系统时间。这个值除以CLOCKS_PER_SEC可以得到秒数。

7、类型别名——#define AA char  // 用AA作为char的别名,所有的AA将被char替代

  或  typedef AA char

8、cin——cin.get()会忽略空格和换行符。发送给cin的输入会被缓冲。按下回车键,输入的内容才会被发送给程序。

  cin.get(ch)会得到每个字符。其参数声明为引用类型,所以函数可以修改其参数的值。

9、EOF——很多PC编程环境都将Ctrl+Z视为模拟的EOF,检测到EOF之后,cin将两位(eofbit和failbit)都设置为1。eof()和fail()用来查看是否被设置。

  所以循环等待输入的条件可以这样设置:while( cin.fail() == false ) {} 或 whle( !cin.fail() ){} 或 while(cin){} 或 while( cin.get(ch) ){}

  (通常,EOF被定义为-1)

第六章

10、运算符——!运算符的优先级高于所有的关系运算符和算术运算符。

    逻辑AND运算符的优先级高于逻辑OR运算符。

    C++确保程序从左到右计算逻辑表达式。

11、cctype——字符函数库。如isalpha(ch)判断字符是不是字母,是字母就返回非零,否则返回0。

12、文本IO——使用cin进行输入时,程序将输入看作一系列的字节,其中每个字节被解释为字符编码。

第七章

13、定义函数——

  (1)、无返回值:  void functionName(parameterList) {}

  (2)、有返回值:  typeName functionName(parameterList) {}

  (注意!返回值的类型不能是数组,可以是其他任何类型)

14、函数原型——

  (1)、函数原型能极大降低程序出错的几率、提高效率。

  (2)、函数原型不要求提供变量名,有类型列表就足够了。

  (3)、括号为空与括号中使用void是等效的,不指定参数列表应使用省略号——void haha(...);

15、函数和二维数组——指针的类型是指把指针声明语句中的指针名字去掉所剩下的部分

  对于:  int data[3][4] = {{1,2,3,4},{5,6,7,8},{4,3,2,1}};  int total = sum(data,3);  sum的原型是什么?

  (1)、原型是:  int sum ( int (*a) [4] , int size);

  所以 int(*)[4]即,将这个指针指向int[4]。所以data的类型指向4个int组成的数组的指针

  所以 int *a[4] 的类型是int * [4],这个指针指向int,总共有4个,即它是4个指向int指针组成的数组

  (2)、函数定义:  int sum (int a[][4] ,int size);

  a[ r ][ c ] = *( *( a + r ) + c); 

16、递归——每个递归调用都创建自己的一套变量。

  (注意!C++不允许main()调用自己。)

17、函数指针——

  (1)、函数地址:  函数的地址是存储其机器语言代码的内存的开始地址。如果think()是一个函数,那么think就是它的地址。

  (2)、声明指针函数:  函数:double pam(int);  指针函数为: double (*pf)(int) = pam;  // pf是一个指向函数的指针。

  

第八章

18、编译过程——编译过程的最终产品是可执行程序(由一组机器语言指令组成)。

  运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。计算机随后逐步执行这些指令。

19、函数调用——执行到函数调用指令时,程序将在函数调用后,立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,

  执行函数代码(也许还需将返回值放入寄存器),然后跳回到地址被保存的指令处。

20、内联函数——编译器使用相应的函数代码代替函数调用。

  函数声明前加上关键字inline,函数定义前加上关键字inline。通常将省略原型,原型处直接定义。

21、引用变量——主要用途是作函数的参数,函数将使用原始数据,而不是其副本。

  (1)、创建:  int rats ;  int & a = rats;

  (2)、引用必须在声明时初始化,不能先声明再初始化。也不能通过赋值来设置引用。

  (3)、引用一旦与某个变量关联起来,就一直效忠。

  (4)、若引用参数是const,若实参类型正确却不是左值 或 类型不正确却可以转换成正确类型 时,将创建临时变量

  (5)、返回引用时,应避免返回函数终止时不再存在的内存单元引用。

22、左值——

  (1)、可被引用的数据对象。如变量、数组元素、结构成员、引用和解除引用的指针等。

  (2)、非左值,包括字面常量和包含多项的表达式。

  (3)、常规变量属于可修改的左值,const变量属于不可修改的左值。

23、右值引用——可指向右值的引用,使用&&声明。如:  double & rref = std::sqrt ( 26.00 ) ;

24、默认参数——通过函数原型设置函数参数默认值。

  (1)、必须从右到左添加默认值。

  (2)、实参按照从左到右的顺序依次被赋值给形参,而不能跳过任何参数。

25、函数重载——参数列表(特征标)不同,而函数名相同的函数。

  (1)、类型引用和类型本身被视为同一个特征标。

  (2)、不能把const变量赋值给非const形参

26、名称修饰——根据函数原型中指定的形参类型对每个函数名进行加密,用来跟踪每一个重载函数。

27、函数模板——相当于Java中的泛型

  (1)、声明:  template <typename T> void Swap(T &a, T &b);  // typeName 可用 class 替换

  (2)、函数模板不能缩短可执行程序,最终的代码不包含任何模板,只包含了为程序生成的实际函数。

  (3)、一般将模板放在头文件中。

28、显式具体化——具体化的函数定义,匹配时,使用它而不是模板。

  (1)、非模板函数:  void swap( job &, job &);

  (2)、模板函数:  template <typeName T> void swap( T & ,T &);

  (3)、显式具体化:  template<> void swap<job>( job &, job &);  // swap<job>中job是可选的

  (4)、编译器在选择原型时:  非模板函数  >  显式具体化  >  模板函数

  (5)、显式实例化:  template void swap<int> ( int, int);  // template后无<>

  (6)、隐式实例化:  对于模板函数,编译器会通过对这个模板含数的引用生成一个含数的实例,这通常叫隐式实例化

29、decltype——decltype( expression ) var;  // 让var的类型与expression一样。

  (注意!若expression是一个函数调用,var的类型与其返回值相同。若expression是一个左值,var为指向其类型的引用)

30、后置返回类型——给函数指定返回类型。

  如:template<class T1, class T2>  auto gt( T1 x, T2 y) -> decltype( x + y ) {  ...  return x + y ;}

C++学习笔记(2)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 不明显的多线程编程的具体Bugs

    我们都知道,在编写多线程程序时,我们应该记住很多细节,比如锁,使用线程安全库等.这里有一个不太明显的bug的列表,特定于多线程程序.其中许多都没有在初学者的文档或教程中提到,但我认为每个使用线程的人最 ...

  2. GPS数据读取与处理

    GPS数据读取与处理 GPS模块简介 SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面登上了一个顶峰,灵敏度比以前的产品大 ...

  3. Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

        Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. ...

  4. Touch ID使用

    前言:如果图片看不了请移步:简书 Touch ID简介 Touch ID指纹识别作为iPhone 5s上的"杀手级"功能早已为人们所熟知,目前搭载的设备有iphone SE.iPh ...

  5. iOS开发工程师面试题(二)

    1.手写冒泡跟插入排序 冒泡排序来源于生活常识,相当于把数组竖起来,轻的向上,重的向下.void bubbleSort(int[] unsorted) { ; i < unsorted.Leng ...

  6. Linux命令操作

    该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件 ...

  7. Redis 键(key)相关的命令及其它命令的查看地址

    Redis 键(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME ...

  8. routes.rb和link_to的一些规则

    rails文档中描述了一个知识,link_to方法用于产生链接,但链接是根据routes.rb中的路由规则来产生的.这又分为面向资源和非面向资源两种产生链接的方法.比如 routes.rb文件中有两条 ...

  9. HSDB - HotSpot debugger

    HSDB 是专门用于调试 HotSpot VM 的调试器,它是一个图形化界面.与之对应的还有个 CLHSDB-Command Line HotSpot Debugger,命令行调试界面.下面是启动命令 ...

  10. CentOS 6.8 LAMP 安装配置

    1.远程系统拒绝了连接: 需要关闭防火墙/etc/rc.d/init.d/iptables stop service iptables stop chkconfig iptables off sete ...