文章目录
01 :视C++为一个语言联邦
C++的四个次语言:
C:C++是在C语言的基础上发展而来的;
Object-Oriented C++:这是C++中不同于C的部分,这里主要指面向对象。class(包括构造函数和析构函数)、封装、继承、多态、virtual函数(动态绑定)…等等;
Template C++:C++中的泛型编程;
STL:标准模板库,对容器、迭代器。算法以及函数对象的规约有极佳的紧密配合与协调。
02: 尽量const、enum、inline替换#define
#define ASPECT_RATIO 1.653
记号 ASPECT_RATIO
可能不会被编译器看见,或者在编译器开始处理源码之前就被预处理器移走了,即你所使用的名称可能并未进入记号表。
解决办法:用const
代替#define
。
1、const
以const
替换#define
时,注意两个特殊情况:
1)定义常量指针。
由于常量定义式通常被放在头文件内(以便被不同的源码含入),因此有必要将指针(而不只是指针所指之物)声明为const。例如若要在头文件内定义一个常量的char*-based
字符串,你必须写const
两次:
const char* const authorName ="Scott Meyers" ;
另外,string
对象通常比char*-based
合宜,所以上述的authorName
往往定义成这样更好些:
const std::string authorName ("Scott Meyers") ;
class
专属常量
为了将常量的作用域限制于 class
内,必须让它成为 class
的一个成员。而为确保此常量至多只有一份实体,你必须让它成为一个static
成员:
class GamePlayer {
private:
static const int NumTurns = 5; //常量声明式
int scores [NumTurns]; //使用该常量
...
};
然而你所看到的是NumTurns
的声明式而非定义式。通常C++要求你对你所使用的任何东西提供一个定义式,但如果它是个class
专属常量又是static
且为整数类型( integral type
,例如 ints
, chars
),则需特殊处理