2.11 整型
表示整数、字符和布尔值的算术类型合称为整型。
字符类型有两种:cjhar 和 wchar_t。
通常将8位的块作为一个字节,32位或4个字节作为一个“字(word)”。
例如:short类型为半个机器字长,int类型为一个机器字长,而long类型为一个或两个机器字长(在32位机器中int 类型和long类型通常字节长度相同)
1.整型int ,short,long都默认为带符号型
无符号型中,这种类型的unsigned型可以取值0-255,;表示signed整型类型 最常见的策略是用其中一位作为符合位。符号位为1,值就为负;符号位为0,值就为0或正。一个使用一位符号位的表示方式的8位signed整型取值是从-128-127.
2.12 浮点型
一般float类型用一个字(32位)表示,double类型用两个字(64位)表示,long double 类型用三个或四个(96位或128位)来表示,类型的取值范围决定 了浮点数所含的有效数字位数,比如:float型智能保证有6位有效数字,double可以保证至少10位有效数字。所以计算时,使用double类型基本不会出错。
2.2 字面值常量
1.像42这样的数,程序中被当作字面值常量(literal constant),称为字面值是因为只能用它的值来称呼它,称为常量是因为它的值不能改变。只有内置类型存在字面值。
以0(零)开头的字面值整数常量表示八进制,以0x或0X开头的表示十六进制。
2.布尔字面值和字符字面值
单词true和false是布尔型的字面值,可打印的字符型字面值通常用一对单引号来定义。
5.字符串字面值常量用双引号括起来的零个或者多个字符表示,不可打印字符表示成相应的转义字符,C++中所有的字符串字面值都是由编译器自动在末尾添加一个空字符。
6.字符串字面值的连接
比如:
std::cout << " a multi-line "
"string literal "
"using concatenation"
<< std::endl;
输出结果是:
a multi-line string literal using concatenation
2.3 变量
代码:
#include <iostream>
int main()
{
int vale = 2;
int pow = 10;
int result = 1;
for (int count = 0; count != pow; ++count) {
result *= vale;
}
std::cout << vale << " raised to the power of " << pow << " is " << result << std::endl;
// "\t"是水平制表符,8个空格
return 0;
}
2.3.2 变量名,即变量的标识符,必须以字母或下划线开头,并且区分大小写字母。
1.C++关键字不能用作程序的标识符,比如bool,do,using等
2.变量名一般用小写字母;包含多个词的标识符书写为在每个词之间添加一个下划线。
2.3.3 定义对象
比如:int units_sold;std::string title;等
每个定义都是以类型说明符开始,类型说明符指定与对象相关联的类型:int, double ,std::string等
1.初始化
C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化则把初始化式放在括号中。
int ival(1024);int ival = 1024; 这两种情形中,ival都被初始化为1024.
注意:“初始化不是赋值”
初始化指创建变量并给它赋初始值,而赋值则是擦除对象的当前值并用新值代替。
C++中,初始化和赋值是两种不同的操作。直接初始化的语法更灵活且更有效。
2.使用多个初始化式
定义如何进行初始化的成员函数称为构造函数,一个类可以定义几个构造函数,每个构造函数必须必须接受不同数目或不同类型的参数。
2.3.4 变量初始化规则
1.内置类型变量的初始化
内置类型变量是否自动初始化取决于变量定义的位置。
在函数体外定义的变量都初始化成0,在函数体里定义的内置类型变量不能进行自动初始化。所以建议每个内置类型的对象都要初始化。
2.3.5 声明和定义
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且只有一个定义
声明:用于向程序表明变量的类型和名字,可以使用extern关键字声明变量名而定义它。extern声明不是定义,也不分配存储空间。
只有当声明也是定义时,声明才可以有初始式,因为只有定义才分配存储空间:extern double pi = 3.1426;
只有当extern声明位于函数外部时,才可以含有初始化式。
2.4 const 限定符
const 把一个对象转换成一个常量:const int bufSize = 512;
因为常量在定义后就不能被修改,所以定义时必须初始化。
2. const 对象默认为文件的局部变量
在全局作用域声明的 const 变量是定义该对象的文件的局部变量,此变量只存在于那个文件中,不能被其他文件访问,但是指定const变量为extern,就可以在整个程序中访问const对象:
//file_1.cc
extern const int bufSize = fcn();
//file_2.cc
extern const int bufSize;
for (int index = 0; index != bufSize; ++index)
//
本程序中,file_1.cc通过函数fcn()的返回值来定义和初始化bufSize,而bufSize的定义为extern,也就是说bufSize可以在其他文件中使用。
2.5引用
引用必须用与该引用同类型的对象初始化:
int ival = 1024;
int &refVal = ival;
3.const引用
const引用是指向const对象的引用
const int ival =1024;
const int &refVal = ival;
2.6 typedef名字
typedef 可以用来定义类型的同义词,以关键字typedef开始,后面是数据类型和标识符
typedef double wages;
typedet int exam_score;
2.7 枚举
1.定义和初始化枚举
枚举定义的关键字是 enum
enum open_modes {input,output,append};
默认的,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1.
2.枚举成员是常量
可以为一个或者多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。
enum Foems {shape = 1,sphere, cylinder, polygon};
显式将shape赋值为1,其他枚举成员隐式初始化。sphere初始化为2,cylinder初始化为3,polygon初始化4.
不能改变枚举成员的值,枚举成员本身就是一个常量表达式。
3. 每个enum都定义了一种唯一的类型
2.8 类类型
2.定义Sales_item类
class Sales_item {
public:
//operations on Sales_item objects will go here
private:
std::string isbn;
unsigned units_sold;
doouble revenue;
};//注意这里必须要跟一个分号
3.类的数据成员
定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化作为其定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型,我们不是
定义成员变量的时候初始化数据成员,而是通过构造函数的特殊成员函数控制初始化。
4.访问标号
类中public部分定义的成员在程序的任何部分都可以访问。不是类的组成部分代码不能访问private成员。
5. 使用struct关键字
如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private;如果使用strcut关键字,那么这些成员都是public。使用class还是
struct仅仅影响默认的初始访问级别。
可以等效地定义Sales_item为:
struct Sales_item {
//这里不需要public访问标号,这里的数据成员默认为是public的
//operations on Sales_item objects will go here
private:
std::string isbn;
unsigned units_sold;
doouble revenue;
};//注意这里必须要跟一个分号
2.9 编写自己的头文件
2. 避免多重包含
预处理器变量有两种状态:已定义或未定义。#ifndef指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到
出现#endif。可以使用这么措施来预防多次包含同一头文件:
#ifndef SALESITEM_H
#define SALESITEM_H
//Definition of Sales_item class and related functions goes here
#endif
3.使用自定义的头文件
#include 指示接受以下两种形式
#include <standard_header>
#include "my_file,h"
如果头文件名在尖括号<>里,那么认为该头文件是标准头文件;如果在一对尖括号里,那么认为是非系统头文件,从源文件所在路径开始查找。