一、声明
所谓声明,是用来将一个object、function、class 或 template 的类型名称告诉编译器。声明并不带有细节 信息,一下都是声明:
extern int x; //object declaration int numDigits(int num); //function declaration class Clock; //class declaration template<class T> class SmartPointer; //template declaration
二、定义
所谓定义,是用来将细节信息提供给编译器。
对object而言,其定义式是编译器为它分配内存的地点;
对于function或function template而言,其定义式提供函数本体;
对于class 或 class template 而言,其定义式必须列出该class或者template的所有members;
四、默认构造函数 default constructor
通常当你需要定义对象数组时,就会需要一个default constructor.
class A { public: A(); //default constructor. }; A arrayA[10]; // call default constructor ten times. class B { public: B(int x = 0); //default constructor }; B arrayB[10]; class C { public: C(int x); //not default constructor. }; C arrayC[10]; //error.
附带一提,如果你想要产生一个对象数组,但该对象数组类型没有提供default constructor,通常的做法是定义一个指针数组取而代之。
五、初始化与赋值
对象的初始化发生在它初次获得一个值的时候。对于带有constructor的类或者结构体,初始化是经由调用某个constructor达成的。这和对象的赋值动作有所不同,后者发生于“已初始化之对象被赋予新值”的时候。
Constructors通常必须检验其引数的有效性,而大部分赋值运算符不必如此。另一方面,在新资源可被赋值过去之前,需要先行释放旧资源。
String::String(const char *value) { if(value) { data = new char[strlen(value) + 1]; strcpy(data, value); } else { data = new char[1]; *data = '