2.3.5 声明和定义
为了让多个文件访问相同的变量,C++区分了声明和定义. 可以通过使用extern关键字声明变量名而不定义它.
extern int i; // declares but does not define i
int i; // declares and defines i
extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。
如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern.只有当extern声明位于函数外部时,才可以含有初始化式.
2.4 const 限定符
const 对象默认为文件的局部变量
非const变量默认为extern.要使const变量能够在其他的文件中访问,必须显式地指定它为extern.
2.5 引用
引用就是对象的另一个名字,在实际程序中,引用主要用作函数的形式参数。
引用是一种复合类型,复合类型是指用其他类型定义的类型。
引用必须用与该引用同类型的对象初始化:(定义引用时必须初始化)
int &refVal3 = 10; //error:initializer must be an object
const 引用:指向const对象的引用:
const int ival = 1024;
const int &refVal = ival;
int &ref2 = ival;//error: nonconst reference to a const object
const引用可以初始化为不同类型的对象或者初始化为右值.
const int &r = 42;//非const引用不合法,而const引用却合法.
2.6 typedef 名字
typedef 可以用来定义类型的同义词:
typedef double wages;
typedef int exam_score;
typedef wages salary;
typedef通常被用于以下三个目的:
为了隐藏特定类型的实现,强调使用类型的目的.
简化复杂的类型定义,使其更易理解.
允许一种类型用于多个目的,同时使得每次使用该类型的目的明确.
2.7 枚举
enum open_modes { input, output, append};
2.8 类类型
每个类都定义了一个接口和一个实现.接口由使用该类的代码需要招待的操作组成.实现一般包括该类所需要的数据.
定义Sales_item类
class Sales_item{
public:
private:
std:string isbn;
unsigned units_sold;
double revenue;
};
定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化作为其定义的一部分.当定义数据成员时,只能指定名字和类型.
类是通过构造函数控制初始化.
class定义类,默认为private. 如果使用struct,则是public
2.9.1设计自己的头文件
头文件用于声明而不是用于定义
头文件可以定义类、值在编译时就已知道的const对象和inline函数.
在头文件中定义这些实体,是因为编译器需要它们的定义来产生代码.
避免多重包含
#ifndef SALESITEM_H
#define SALESITEM_H
...
#endif
来源:https://www.cnblogs.com/jimwind/archive/2012/11/23/2785250.html