《C++ primer》--第1,2章小结

时间:2022-04-22
本文章向大家介绍《C++ primer》--第1,2章小结,主要内容包括2、编译器的部分功能: 查错、3、从键盘输入文件结束符、4、整型(integral type):表示整数、字符和布尔值的算术类型。、5、C++中,把负值赋给unsigned对象是合法的,其结果是该负数对该类型的取值个数求模后的值,如果把-1赋给8位的unsigned char 那么结果就是255。、6、字面值常量(literal cinstant)、7、变量、8、变量命名习惯、9、变量的初始化、10、变量初始化规则、11、const限定符、12、引用、13、typedef名字:用来定义类型的同义词。有一下三个目的:、14、枚举(enumeration):定义整数常量集,并将他们聚集成组。、15、头文件:、16、预处理器的简单介绍、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

 1、变量初始化:

 定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。变量的初始化如下:

int val1 = 0; //初始化   
int val2;       //未初始化 

2、编译器的部分功能: 查错

  • 语法错误
  • 类型错误
  • 声明错误    

3、从键盘输入文件结束符

 OS使用不同的值作为文件结束符。Windows系统下通过输入Ctl+z来输入文件结束符,Unix中通常是Ctl+d。

4、整型(integral type):表示整数、字符和布尔值的算术类型。

5、C++中,把负值赋给unsigned对象是合法的,其结果是该负数对该类型的取值个数求模后的值,如果把-1赋给8位的unsigned char 那么结果就是255。

6、字面值常量(literal cinstant)

  1. 整形字面值:可以用3钟进 制来表示,十进制(decimal)、八进制(octal)、十六进制(hexadecimal)。以0开头的是八进制,以0x或0X开头的是十六进制。 还可以在其后加后缀,能强制将字面值常量转化如:L或者l代表常量long,U或者u代表unsigned类型。如:128u /*unsigned*/    8lu/*unsigned long*/
  2. 浮点字面值:通常用十进制或者科学计数法表示,科学技术用E或者e表示。其后加F或者f表示单精度,L或者l表示扩展精度。  如:3.1232F  3.232323E0f
  3. 布尔值和字符字面值:
  4. 非打印字符转移序列

7、变量

1.什么是变量:变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储与该内存中的值的取值范围以及可运用在该变量上的操作集。

    2.C++关键字

8、变量命名习惯

  • 变量名一般用小写字母。例如通常写成index而不是Index或者INDEX
  • 标识符应使用能帮组记忆的名字
  • 包含多个词的标识符书写为在每个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写

9、变量的初始化

   有两种初始化方式:复制初始化(copy-initialization)和直接初始化(direct-initialization)。

      int ival(1024); //direct-initialization

      int ival = 1024; //copy-initialization

      初始化不是赋值,初始化指创建变量并给它赋初始值,而赋值是檫除对象的当前值并用新值代替。

10、变量初始化规则

      1.内置类型变量的初始化

        内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成0,在函数体内定义的内置类型变量不进行自动初始化。除了用作赋值操作 符的做操作数,未初始化变量会引起错误难以发现。所以建议每个内置类型的对象都要初始化,虽不是必须但会更加容易和安全。

      2.声明与定义

          变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义、。

          声明:用于向程序表面变量的类型和名字。定义也是声明,当定义变量时我们声明了他的类型和名字。可以通过使用extern关键字声明变量名而不定义他。不定义的声明包括对象名、对象类型和对象类型前的关键字extern“

          extern int i;  //declares but does not define i;

          int i;            //declares and define i

          程序中声明可以多次,但是定义只有一次。只有当声明也是定义时,声明才可以初始化,因为只有定义才分配存储空间。初始化式必须有存储空间来初始化。

11、const限定符

1.魔数:其意义在上下文没有体现出来。

       2.const限定符将一个对象转换成一个常量 const int bufSize = 512;   //bufSize是不可以修改的

          因为常量在定义后就不能被修改,所以定义时必须初始化。

       3.const对象默认为文件的局部变量:在全局作用域定义非const变量时,可以在整个程序中都可以访问。把一个非const变量定义在一个文件中,在另一个文件中使用这个变量。

//file_1.cpp 
int counter; //definition 
//file_2.cpp 
extern int counter;   //uses counter from file_1 
++counter;            //add counter defined in file_1 

        在全局作用域声明的const变量是定义在该对象的文件中的局部变量,此变量只存在那个文件中,其他文件不能访问。通过指定const变量为extern,就可以在整个程序中访问const对象:

//defines and initializes a const that is accessible to other files 
 extern const int counter = 12; //definition 
 //file_2.cpp 
 extern const int counter;   //uses counter from file_1 
 //uses counter defined file_1 
 for(int index=0; index != counter; ++index)  
 {  
 //// 
 }  

非const变量默认认为extern。要使const变量能够在其他的文件中访问,必须显示的指定为extern。

12、引用

    引用(reference)就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,在变量名前添加"&"符号来定义。复合类型指其他类型定义的类型。

int ival = 1024;  
int &refVal = ival; //ok 
int &refVal2; //error: a refernce must be initialized 
int &refVal3 = 10; // error:initializer must be an object 
  • 引用是别名:当引用初始化后,只要该引用存在,他就保持绑定到初始化时指定的对象。不可能将引用绑定到另一个对象。
  • 定义多个引用:可以在一个类型定义行中定义多个引用。必须在每个引用标识符前添加"&"符号。
  • const引用:指向const对象的引用。可以读取但不能修改。非const引用只能绑定到与该引用同类型的对象,const引用可以绑定到不同但相关的类型的对象或者绑定右值。

13、typedef名字:用来定义类型的同义词。有一下三个目的:

  • 为了隐藏特定类型的实现,强调使用类型的目的
  • 简化复杂的类型定义,使其更易理解
  • 允许一种类型用于多种目的,同时使得每次使用该类型的目的明确

14、枚举(enumeration):定义整数常量集,并将他们聚集成组。

   1.定义和初始化:枚举的定义包括关键字enum,其后是一个枚举类型名。默认第一个枚举成员赋值为0,后面的每个比前一个大1.

//input is 0, output is 1, and append is 2 
enum open_modes {input,output,append};  

   2.枚举成员是常量:用来初始化枚举成员的值必须是一个常量表达式,

//shape is 1, sphere is 2, cylinder is 3, polygon is 4 
enum Forms {shape = 1, sphere, cylinder, polygon};  
   Forms中shape赋值为1,其他的是隐式初始化依次为2,3,4
   3.每个enum都定义一种唯一类型

15、头文件:

  • 头文件用于声明而不是用于定义(头文件包含在多个源文件中,所以不应该含有变量或者函数的定义,有三个例外:头文件可以定义类、值在编译时就已知的const对象和inline函数)
  • 一些const对象定义在头文件中

16、预处理器的简单介绍

 1.头文件经常需要其他头文件

   2.避免多重包含:预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字使用都关联到该预处理器变量。

   预处理器变量有两种状态:已定义和未定义。可以使用下面这段代码来预防多次包含:

#ifndef __CPLUSPLUSPRIMER_H__ 
#define __CPLUSPLUSPRIMER_H__ 
//.... 
#endif  //__CPLUSPLUSPRIMER_H__