`
mmdev
  • 浏览: 12916321 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

C++ Primer 第二章 变量和基本类型 笔记

 
阅读更多

第二章 变量和基本类型 笔记

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开头的字面值整数常量表示八进制,以0x0X开头的表示十六进制

-字面值整数常量的类型默认为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开始,其后是该类的名字标识符。类体位于花括号里面。

-注意:花括号后面必须要跟一个分号。

如:

classSales_item{

public:

//operations on Sales_item objects willgo here

private:

std::string isbn;

unsigned units_sold;

double revenne;

};

解析:publicprivate被称为成员访问限定符,用它们来声明各成员的访问属性。

花括号里面的是类体,类体定义了组成该类型的数据作。

-操作称为成员函数,数据则称为数据成员

-注意:结构体(struct)跟类(class)的不同,它们定义类的唯一差别在于默认访问级别:默认情况下,struct的成员是public,而class的成员为private。还有一点,结构体没有构造函数。

编写自己的头文件

-头文件一般包含类的定义、extern变量的声明和函数的声明。

头文件的正确使用能够带来两个好处:

保证所有文件使用给定实体的同一声明;

当声明需要修改时,只有头文件需要更新;

-头文件用于声明而不是用于定义

-头文件可以定义类、值在编译就已知道的const对象和inline函数。

-一些const对象定义在头文件中为了是编译器能够看见其初始化式。

-如果const变量不是用常量表达式初始化,那么它不应该在头文件中定义。

预处理器的简单介绍

-#include指示只接受一个参数:头文件名

-重要:设计头文件时,应使其可以多次包含在同一个源文件中。

-预处理器变量有两种状态:已定义或未定义。

#define指示接受一个名字并定义该名字为预处理器变量

#ifndef指示检测指定的预处理器变量是否未定义。如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif

注:如果头文件名括在尖括号(< >)里,那么认为该头文件是标准头文件。

如果头文件名括在一对引号里,那么认为它是非系统头文件。

总结:

本章的笔记到这里就是全部内容了,因为之前有一定的基础,学起本章来并不会吃力,我发现这本书的一些名称和叫法跟之前学谭伯伯的有些差别,对我来说,我更愿意谭伯伯那种叫法,比较通俗易懂,开始慢慢发现这本书有些东西解析复杂化了,新接触了一些新术语和内容,要我一下子能很好掌握,对我来说是一个挑战,为了能避免自己遗忘得太快,没结束一章,在三天内做笔记,把重要内容摘录下来。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics