1,类类型变量的初始化
如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。
它是通过定义一个特殊的构造函数即默认构造函数来实现的。
2,可以通过使用 extern 关键字声明变量名而不定义它。extern 声明不是定义,也不分配存储空间,程序中变量可以声明多次,但只能定义一次。只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern。
在 C++ 语言中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量。
3,C++ 语言中,大多数作用域是用花括号来界定的。一般来说,名字从其声明点开始直到其声明所在的作用域结束处都是可见的。
4, const 限定符
magic number;非 const 变量默认为 extern。要使 const 变量能够在其他的
文件中访问,必须地指定它为 extern。
5,引用就是对象的另一个名字.在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,通过在变量名前添加“&”符号来定义。因为引用只是它绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。const 引用是指向 const 对象的引用。
const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。
6,typedef 名字
typedef 可以用来定义类型的同义词。typedef 定义以关键字 typedef 开始,后面是数据类型和标识符。
typedef 通常被用于以下三种目的:
为了隐藏特定类型的实现,强调使用类型的目的。
简化复杂的类型定义,使其更易理解。
允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
7,枚举
枚举的定义包括关键字 enum,其后是一个可选的枚举类型名,和一个用花
括号括起来、用逗号分开的枚举成员列表。
// input is 0, output is 1, and append is 2
enum open_modes {input, output, append};
枚举成员是常量。
常量表达式是编译器在编译时就能够计算出结果的整型表达式。
枚举成员值可以是不唯一的。
不能改变枚举成员的值。枚举成员本身就是一个常量表达式,所以也可用于需要常量表达式的任何地方。
8,类类型
定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化
作为其定义的一部分。
类中 public 部分定义的成员在程序的任何部分都可以访问。一般把操作放
在 public 部分,这样程序的任何代码都可以执行这些操作。
不是类的组成部分的代码不能访问 private 成员。
C++ 支持另一个关键字 struct,它也可以定义类类型。struct 关键字是从
C 语言中继承过来的。
如果使用 class 关键字来定义类,那么定义在第一个访问标号前的任何成
员都隐式指定为 private;如果使用 struct 关键字,那么这些成员都是
public。使用 class 还是 struct 关键字来定义类,仅仅影响默认的初始访问
级别。
struct Sales_item {
// no need for public label, members are public by default
// operations on Sales_item objects
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
一般类定义都会放入头文件。
头文件为相关声明提供了一个集中存放的位置。
头文件一般包含类的定义、extern 变量的声明和函数的声明。头文件的正确使用能够带来两个好处:保证所有文件使用给定实体的同一声明;当声明需要修改时,只有头文件需要更新。
设计头文件还需要注意以下几点:头文件中的声明在逻辑上应该是统一的。
编译头文件需要一定的时间。如果头文件太大,程序员可能不愿意承受包含该头
文件所带来的编译时代价。为了减少处理头文件的编译时间,有些 C++的实现支持预编译头文件。
编译和链接多个源文件
如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。
它是通过定义一个特殊的构造函数即默认构造函数来实现的。
2,可以通过使用 extern 关键字声明变量名而不定义它。extern 声明不是定义,也不分配存储空间,程序中变量可以声明多次,但只能定义一次。只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern。
在 C++ 语言中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量。
3,C++ 语言中,大多数作用域是用花括号来界定的。一般来说,名字从其声明点开始直到其声明所在的作用域结束处都是可见的。
4, const 限定符
magic number;非 const 变量默认为 extern。要使 const 变量能够在其他的
文件中访问,必须地指定它为 extern。
5,引用就是对象的另一个名字.在实际程序中,引用主要用作函数的形式参数。引用是一种复合类型,通过在变量名前添加“&”符号来定义。因为引用只是它绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用绑定到另一个对象。const 引用是指向 const 对象的引用。
const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。
6,typedef 名字
typedef 可以用来定义类型的同义词。typedef 定义以关键字 typedef 开始,后面是数据类型和标识符。
typedef 通常被用于以下三种目的:
为了隐藏特定类型的实现,强调使用类型的目的。
简化复杂的类型定义,使其更易理解。
允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
7,枚举
枚举的定义包括关键字 enum,其后是一个可选的枚举类型名,和一个用花
括号括起来、用逗号分开的枚举成员列表。
// input is 0, output is 1, and append is 2
enum open_modes {input, output, append};
枚举成员是常量。
常量表达式是编译器在编译时就能够计算出结果的整型表达式。
枚举成员值可以是不唯一的。
不能改变枚举成员的值。枚举成员本身就是一个常量表达式,所以也可用于需要常量表达式的任何地方。
8,类类型
定义变量和定义数据成员存在非常重要的区别:一般不能把类成员的初始化
作为其定义的一部分。
类中 public 部分定义的成员在程序的任何部分都可以访问。一般把操作放
在 public 部分,这样程序的任何代码都可以执行这些操作。
不是类的组成部分的代码不能访问 private 成员。
C++ 支持另一个关键字 struct,它也可以定义类类型。struct 关键字是从
C 语言中继承过来的。
如果使用 class 关键字来定义类,那么定义在第一个访问标号前的任何成
员都隐式指定为 private;如果使用 struct 关键字,那么这些成员都是
public。使用 class 还是 struct 关键字来定义类,仅仅影响默认的初始访问
级别。
struct Sales_item {
// no need for public label, members are public by default
// operations on Sales_item objects
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
一般类定义都会放入头文件。
头文件为相关声明提供了一个集中存放的位置。
头文件一般包含类的定义、extern 变量的声明和函数的声明。头文件的正确使用能够带来两个好处:保证所有文件使用给定实体的同一声明;当声明需要修改时,只有头文件需要更新。
设计头文件还需要注意以下几点:头文件中的声明在逻辑上应该是统一的。
编译头文件需要一定的时间。如果头文件太大,程序员可能不愿意承受包含该头
文件所带来的编译时代价。为了减少处理头文件的编译时间,有些 C++的实现支持预编译头文件。
编译和链接多个源文件