C++基础

变量和基本类型
1)左值:左值可以出现在赋值语句的左边或者右边。
右值:右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。
变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。=读取右操作数并写到左操作数。
2)C++中理解“初始化不是赋值”,初始化指创建变量并给他赋初始值,赋值则是擦除对象的当前值并用新值代替。
3)声明和定义变量的定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义。声明用于向程序表明变量的名字和类型。定义也是声明:当定义变量时,我们声明了他的名字和类型。可以通过使用extern关键字声明变量名而不定义它。

extern int i;

extern 声明不是定义,也不分配存储空间。事实上,他只是说明变量定义在程序的其他地方。
声明如果有初始化式,那么它可被当作是定义,

extern double pi = 3.14;

虽然使用了extern,但是这条语句还是定义了pi,分配并初始化了存储空间。只有当extern声明位于函数外部时,才可以含有初始化式。
任何在多个文件中使用的变量都需要与定义分离的声明。这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明。
4)名字的作用域定义在所有函数外部的名字具有全局作用域,可以在程序的任何地方访问。此外,定义在函数体内的变量还有局部作用域语句作用域,比如定义在for语句的作用域中的变量只能在for语句中使用。作用域具有向下兼容的特点,此外,名字还可以在内部作用域中重新定义。
5)const限定符,把一个对象转换成一个常量。与其他变量不同除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在与那个文件中,不能被其他文件访问。通过指定const变量为extern,就可以在整个程序中访问const对象。看一下区别:

//file1 
int counter;
//file2
extern int counter;
++counter; // ok 

而const变量的使用:

//file1
extern const int bufsize = fcn();
//file2
extern const int bufsize;
.......   //ok 可以使用

6)引用引用是对象的另外一个名字,实际程序中引用主要用作程序的形式参数。引用是一种复合类型,通过在变量名前加“&”符号定义。复合类型是指用其他类型定义的类型。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用,但可以定义其他任何类型的引用,但是要注意:引用的其他类型要明确,引用在定义时必须进行初始化。初始化是指明引用指向哪个对象的唯一方法。
7)const引用,const引用是指向const对象的引用:

const int ival = 1024;
const int &refval = ival;
int &ref2 = ival;   //error 

可以读取但不能修改refval,因此任何对refval的赋值都是非法的。这个限制的意义:不能直接对ival赋值,因此不能通过使用refval来修改ival。同理,用ival初始化ref2也是不合法的,ref2是不同的非const引用。
非const引用只能绑定到与该引用同类型的对象。
const引用则可以绑定到不同但相关的类型的对象或绑定到右值。
8)typedef可以用来定义类型的同义词强调使用类型的目的,一目了然。
9)enum枚举类型:枚举成员本身就是一个常量表达式。每个enum都定义了一种唯一的新的类型。枚举类型的初始化或赋值只能通过其枚举成员或同一枚举类型的其他对象来进行。

  1. 定义一种新的数据类型 - 枚举型
    以下代码定义了这种新的数据类型 - 枚举型
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2. 使用枚举类型对变量进行声明
新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:
char a; //变量a的类型均为字符型char
char letter;
int x,y,z; //变量x,y和z的类型均为整型int
int number;
double m, n;
double result; //变量result的类型为双精度浮点型double
既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY yesterday;
enum DAY today;
enum DAY tomorrow; //变量 tomorrow的类型为枚举型enum DAY
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY

方法二:类型定义与变量声明同时进行:

enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。
{
    saturday,
    sunday = 0,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday
} workday; //变量workday的类型为枚举型enum DAY
enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week
 enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量

方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:

typedef enum workday
{
    saturday,
    sunday = 0,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
enum workday中的workday可以省略:
typedef enum
{
    saturday,
    sunday = 0,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即 enum workday

也可以用这种方式:

typedef enum workday
{
    saturday,
    sunday = 0,
    monday,
    tuesday,
    wednesday,
    thursday,
    friday
};
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即 enum workday

注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示:
错误声明一:存在同名的枚举类型

typedef enum
{
    wednesday,
    thursday,
    friday
} workday;
typedef enum WEEK
{
    saturday,
    sunday = 0,
    monday,
} workday;
 

错误声明二:存在同名的枚举成员

typedef enum
{
    wednesday,
    thursday,
    friday
} workday_1;
typedef enum WEEK
{
    wednesday,
    sunday = 0,
    monday,
} workday_2;
  1. 使用枚举类型的变量
    3.1 对枚举型的变量赋值。
    实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
    方法一:先声明变量,再对变量赋值
/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
    /* 使用枚举类型声明变量,再对枚举型变量赋值 */
    enum DAY yesterday, today, tomorrow; 
    yesterday = MON;
    today     = TUE;
    tomorrow  = WED;

方法二:声明变量的同时赋初值
/* 定义枚举类型 /
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
/
使用枚举类型声明变量同时对枚举型变量赋初值 /
enum DAY yesterday = MON, today = TUE, tomorrow = WED;
方法三:定义类型的同时声明变量,然后对变量赋值。
/
定义枚举类型,同时声明该类型的三个变量,它们都为全局变量 /
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;
/
对枚举型的变量赋值 /
yesterday = MON;
today = TUE;
tomorrow = WED;
方法四:类型定义,变量声明,赋初值同时进行。
/
定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量 /
enum DAY
{
MON=1,
TUE,
WED,
THU,
FRI,
SAT,
SUN
}
yesterday = MON, today = TUE, tomorrow = WED;
/
定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量 */
3.2 对枚举型的变量赋整数值时,需要进行类型转换。
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
enum DAY yesterday, today, tomorrow;
yesterday = TUE;
today = (enum DAY) (yesterday + 1); //类型转换
tomorrow = (enum DAY) 30; //类型转换
//tomorrow = 3; //错误
10)头文件 设计头文件时要注意,定义只可以 出现一次,而声明则可以出现多次。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义,否则可能会导致多重定义链接错误,但是有3个例外,头文件可以定义类、值在编译时就已经确定的const对象、inline函数。
11)预处理器 #include 指示只接受一个参数:头文件名。头文件一般都含有支持分别编译所需的类定义以及变量和函数的声明。
避免多重包含的方法:引入额外的预处理器设施,预处理器允许自定义变量。预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。预处理器变量有两种状态:已定义或未定义。#define 接受一个名字并定义该名字为预处理器变量。#ifndef指示检测指定的预处理器变量是否未定义。如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif。

#ifndef SALESITEM_H
#define SALESITEM_H
......
.....
.....  //类的定义及成员函数
#endif

10)头文件 设计头文件时要注意,定义只可以 出现一次,而声明则可以出现多次。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义,否则可能会导致多重定义链接错误,但是有3个例外,头文件可以定义类、值在编译时就已经确定的const对象、inline函数。
11)预处理器 #include 指示只接受一个参数:头文件名。头文件一般都含有支持分别编译所需的类定义以及变量和函数的声明。
避免多重包含的方法:引入额外的预处理器设施,预处理器允许自定义变量。预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。为了避免名字冲突,预处理器变量经常用全大写字母表示。预处理器变量有两种状态:已定义或未定义。#define 接受一个名字并定义该名字为预处理器变量。#ifndef指示检测指定的预处理器变量是否未定义。如果未定义,那么跟在其后的所有指示都被处理,直到出现#endif。

#ifndef SALESITEM_H
#define SALESITEM_H
......
.....
.....  //类的定义及成员函数
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值