第二章 变量和基本类型 笔记 2.1 基本内置类型 ——C++定义了一组整数、浮点数、单个字符和布尔值的算术类型,另外还定义了一种称为void的特殊类型。void类型没有对应的值,仅用在有有限的一些情况下,通常用作无返回值函数的返回类型。 类型 含义 最小存储空间 -bool 布尔型 —— -char 字符型8位 -wchar_t 宽字符型16位 -short 短整型16位 -int 整型16位 -long 长整型32位 -float 单精度浮点型6位有效数字 -double 双精度浮点型10位有效数字 -long double 扩展精度浮点型10位有效数字 关于内置类型的摘要: -short、int和long类型都表示整型值,存储空间的大小不同。一般,short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长。
-bool类型表示真值true和false。可以将算术类型的任何值赋给bool对象。0值算术类型代表false,任何非0的值代表true。
-unsigned和signed类型有什么差别? —前者为无符号类型,只能表示大于或等于0的正数。后者为符号类型,可以表示正数、负数和0。
-一般float类型用一个字(32位)来表示,double类型用两个字(64)来表示,longdouble类型用三个或四个字(96或128字)来表示。注意:float型只能保证6位有效数字,而double型至少可以保证10位有效数字。所以使用double类型基本上不会错了。
2.2 字面值常量(字符常量) 整型字面值规则 -以0开头的字面值整数常量表示八进制,以0x或0X开头的表示十六进制、 -字面值整数常量的类型默认为int或long类型。 浮点字面值规则 -默认浮点字面值常量为double类型。在数值的后面加上f表示单精度,加上L表示扩展精度。 -通常可以用十进制或者科学技术法表示浮点型常量。
布尔字面值和字符字面值 -用true和false表示布尔型字面值:bool test =false -字符型值用一对单引号来定义,如:(‘a’)
转义字符常量 -都是以反斜线符号开始,如:(\n)
字符串常量 -用双引号括起来的零个或者多个字符表示,如:(“hello world”) -注意:C++中所有字符串常量都由编译器自动在末尾添加一个空字符(‘\0’)
2.3 变量 -重要:程序中使用变量前必须先定义变量的类型。 -左值(lvalue):可以出现在赋值语句的左边或右边。 -右值(rvalue):只能出现在赋值的右边,不能出现在赋值语句的左边。 -左值就是变量的地址,右值就是变量的值。 -变量是左值,因此可以出现在赋值语句的左边。数字常量是右值,因此不能被赋值。 -什么是变量:具有名字的存储区,是有名字的对象。 -什么是对象:内存中具有类型的区域,计算左值表达式时就会产生对象。 变量名 -即变量的标识符,可以由字母、数字和下划线组成。变量名必须以字母或下划线开头,并且区分大小写字母,如:somename -注意:标识符不能包含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母。 -在函数外定义的标识符不能以下划线开头 定义对象 如:intunits_sold; -以类型名开始+标识符+; -以分号结束定义 初始化 -两种初始化变量的形式:复制初始化和直接初始化。 如:int ival(1024);-直接初始化 Int ival=1024;-复制初始化 -注意:C++中初始化和赋值是两种不同操作。 声明和定义 -变量的定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,有且只仅有一个定义。 -声明(declaration)用于向程序表明变量的类型和名字。 -定义也是声明:当定义变量时我们声明了它的类型和名字。 -不定义变量的声明包括对象名、对象类型和对象类型前关键字extern: -如,extern int i;声明了变量名i并不定义它。 -extern声明不是定义,也不分配空间。 -只有当声明也是定义是,声明才可以有初始化式,因为只有定义才能分配存储空间。 -只有当extern声明位于函数外部时,才可以含有初始化式。 名字作用域 -局部变量:函数内部定义,还有语句作用域 -全局变量:函数外变量
2.4 const限定符 -const是关键字,用来定义常变量,即把一个对象转换成一个常量。 -注解:因为常量再定义后就不能被修改,所以定义时必须初始化。 -通过指定const变量为extern,就可以在整个程序中访问const对象,否则const变量只能是局部变量。 -注解:非const变量默认为extern,要使const变量能够在其他的文件中访问,必须显式地指定它为extern。
2.5 引用 -重要概念:引用只是对象的另一个名字。 -是一种复合类型(compound type),添加“&”来定义 -引用必须用于该引用同类型的对象初始化: int ival=1024; int &refval=ival; 关于const引用 -const引用是指向const的引用 如:const intival=1024; const int&refval=ival; 可以读取但不能修改refval, -const引用可以初始化为不同类型的对象或者初始化为右值。 -注解:非const引用只能绑定到与该引用同类型的对象。 const引用则可以绑定到不同但相关的类型的对象或绑定到右值。
typedef名字 -用来定义类型的同义词:typedef double wages;//wages是double的同义词 -typedef通常被用于以下三种目的: 为了隐藏特定类型的实现,强调使用类型的目的。 简化复杂的类型定义,使其更易理解。 允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
枚举(enum) 定义和初始化枚举 如:enumopen_modes(input,output,append); 包括以下几个部分: 关键字enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。 -用来初始化枚举成员的值必须是一个常量表达式。
类类型 -类定义以关键字class开始,其后是该类的名字标识符。类体位于花括号里面。 -注意:花括号后面必须要跟一个分号。 如: class Sales_item{ public: //operations on Sales_item objects willgo here private: std::string isbn; unsigned units_sold; double revenne; }; 解析:public和private被称为成员访问限定符,用它们来声明各成员的访问属性。 花括号里面的是类体,类体定义了组成该类型的数据和操作。 -操作称为成员函数,数据则称为数据成员 -注意:结构体(struct)跟类(class)的不同,它们定义类的唯一差别在于默认访问级别:默认情况下,struct的成员是public,而class的成员为private。还有一点,结构体没有构造函数。
编写自己的头文件 -头文件一般包含类的定义、extern变量的声明和函数的声明。 头文件的正确使用能够带来两个好处: 保证所有文件使用给定实体的同一声明; 当声明需要修改时,只有头文件需要更新; -头文件用于声明而不是用于定义 -头文件可以定义类、值在编译就已知道的const对象和inline函数。 -一些const对象定义在头文件中为了是编译器能够看见其初始化式。 -如果const变量不是用常量表达式初始化,那么它不应该在头文件中定义。 预处理器的简单介绍 -#include指示只接受一个参数:头文件名 -重要:设计头文件时,应使其可以多次包含在同一个源文件中。 -预处理器变量有两种状态:已定义或未定义。 #define指示接受一个名字并定义改名字为预处理器变量。 #ifndef指示检测指定的预处理器变量是否未定义。如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif。 注:如果头文件名括在尖括号(< >)里,那么认为该头文件是标准头文件。 如果头文件名括在一对引号里,那么认为它是非系统头文件。 总结: 本章的笔记到这里就是全部内容了,因为之前有一定的基础,学起本章来并不会吃力,我发现这本书的一些名称和叫法跟之前学谭伯伯的有些差别,对我来说,我更愿意谭伯伯那种叫法,比较通俗易懂,开始慢慢发现这本书有些东西解析复杂化了,新接触了一些新术语和内容,要我一下子能很好掌握,对我来说是一个挑战,为了能避免自己遗忘得太快,没结束一章,在三天内做笔记,把重要内容摘录下来 摘自:wwj的梦想之路 |