C++ Primer 第2章 变量和基本类型

来源:互联网 发布:网络电视怎么调节亮度 编辑:程序博客网 时间:2024/06/05 06:52


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.ccextern const int bufSize = fcn();//file_2.ccextern 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 hereprivate: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 hereprivate: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"

如果头文件名在尖括号<>里,那么认为该头文件是标准头文件;如果在一对尖括号里,那么认为是非系统头文件,从源文件所在路径开始查找。

原创粉丝点击