1.通常存储器中一个字节为8位,一个字word为32位。每一个字节和一个地址关联。
2.C++只规定了每一种算数类型的最小存储空间,但并不阻止编译器使用更大的存储空间。
(1)整型分三种:
字符类型 char:单个机器字节byte-8bit
整数类型:默认为带符号的signed,unsigned默认为unsigned int。无符号型若为8位,则取值范围是0到255。若为符号型,则取值范围为-128到127。其中10000000表示-128,00000000表示0。如果赋值超过取值范围,编译器会取该值对256求模后的值。
int:单个机器字长word-32bit(最小存储空间为16bit)
short:半个机器字长-16bit(最小存储空间为16bit)
long:单个机器字长-32bit(最小存储空间为32bit)
布尔类型:表示真值true或者false。可以把算数类型的任何值赋给bool对象。0值算数类型代表false,任何非0的都代表true。
(2)浮点型
单精度浮点型 float:32bit表示,只能保证6位有效数字。
双精度浮点型 double:64bit表示,可以表示10位有效数字。
3.字面值常量:只能用它的值称呼他,而且值不能修改。
(1)只有内置类型存在字面值,没有类类型的字面值,因此不会有标准库类型的字面值。
(2)字符串字面值:自动在末尾添加一个空字符。因此字符字面值'A'和字符串字面值"A"是不同的。
4.变量:提供了程序可操作的有名字的存储区。
(1)每一个变量,或者称为对象,都有特定的类型,该类型决定了变量的内存大小和布局,能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。
(2)变量不能称为右值,只能是赋值语句的左值。字面值不能称为赋值的左值,只能是右值。
5.对象:内存中具有类型的区域。跟数据的类型,有无名字,可读可写无关。
(1)定义对象:定义对象,即指定与对象相关联的类型,决定分配给对象的存储空间和操作。
(2)初始化:初始化不是赋值。可以直接初始化(用括号),可以复制初始化(用等号)。对类类型初始化时,需要用到特殊的成员函数,称为构造函数。当没有提供初始化式时,程序自动调用默认构造函数进行初始化。而如果内置类型变量没有初始化,函数体外定义的变量自动初始化为0,而函数体内的不进行自动初始化,会成为未定义行为。
6.声明与定义:
extern声明不是定义,也不分配存储空间...
变量可以声明多次,但只能定义一次...
当extern声明位于函数外部时,才可以含有初始化式...
extern int i;
许多文件中使用的变量需要有与定义分离的声明...
7.名字的作用域scope:在for循环中定义的变量,不能在main函数其他地方使用,具有语句作用域。
8.const限定符:把一个对象转变为一个常量。
虽然该变量仍然是一个左值,但不可修改,而且在定义后必须初始化。通常在全局作用域声明的const变量是定义在该文件内的局部变量。若要全局所有文件都可以访问,则需要声明extern。
const int bufSize = 512;
9.引用:引用只是对象的另一个名字。必须初始化为相同类型的一个对象。
int ival = 1024;
int &refVal = ival;
const引用:是指向const对象的引用。可以初始化为右值。而且可以绑定到不同但相关的类型的对象上。
int i = 2;
const int &r = 42;
const int &r2 = r+i;
double dval = 3.14;
const int &ri = dval;
10.typedef名字:给了数据类型另一个名字。
typedef double wages;
typedef int scores;
typedef wages salary;
11.枚举:为某些属性定义一组可选择的值。
enum open_modes{input, output, append}
(1)定义和初始化:open_modes是枚举类型名,input等是枚举成员。默认的第一个枚举成员赋值为0,后面的每个枚举成员赋值比前面的大1。
(2)枚举成员是常量,且成员值可以是不唯一的。
enum Points { point2d = 2, point2w,
point3d = 3, point3w};
(3)每个enum都定义一种唯一的类型。可以用一个枚举成员去赋值,也可以用一个对象去赋值。用一个枚举成员赋值很好理解,就是指这个枚举对象目前存在它可选状态中的哪个。用另一个枚举对象去赋值表示他们具有相同的可选状态。
Points pt3d = point3d; // point3d is a Points enumerator
pt2w = pt3d;//both are objects of Points enum type
12.类类型:每个类都定义了一个接口和一个实现。
接口表示该类需要执行的操作,实现表示该类所需要的数据。
(1)定义类:类体可以是空。操作和数据时类的成员。操作称为成员函数,数据称为数据成员。类可以包含0个到多个private或public的访问标号。定义了类就定义了一种新的类型,程序就可以定义该类型的变量。
class Sales_item{
public:
// operation on Sales_item objects will go here
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
(2)定义变量和数据成员的区别:只能指定数据成员的名字和类型,不能在定义时初始化,需要用构造函数来给类进行初始化。
(3)public和private区别:不是类的组成部分的代码不能访问private成员。
(4)struct和class的区别:struct默认为public,class默认为private。
13.头文件:
(1)头文件一般包含:类的定义,extern变量的声明和函数的声明。
(2)头文件用于声明而不是定义。类,const对象和inline函数例外。const对象可以定义在头文件中,是因为它的作用域只在一个文件,因此不会出现重复定义的问题。只要在需要使用时包含头文件即可。
(3)头文件经常需要其他头文件,会造成多重包含,导致一些类和对象多次被定义,因此使用预处理器变量定义头文件保护符来避免这种情况。
#ifndef SALESITEM_H
#define SALESITEM_H
// definition of Sales_item class and functions goes here
#endif
测试SALESITEM_H是否未定义。每个文件的预处理器变量不能重名。
(4)#include的方式区别:
<>认为头文件是标准头文件,编译器毁在预定的位置查找头文件,若是" "则会到源文件所在的路径去查找头文件。