声明和定义(C++)
声明 通知编译器编程元素或名称存在。 定义 指定什么代码或数据名称描述。 名称,才能使用,则必须将其声明为。
声明
声明引入一个或多个名称为程序。 声明过程中可能会发生多次。 因此,类,结构,枚举的类型,同时,其他用户定义的类型可以为每个编译单元声明。 此多次声明的约束是所有声明必须相同。 声明还充当定义,但,当声明:
是函数原型 (而不是函数体的函数声明)。
不包含 extern 说明符,但初始值设定项 (对象和变量) 或函数体 (函数)。 这表明该定义不一定在当前翻译单元并提供名称外部连接。
是在类声明中静态数据成员。
由于静态类数据成员都是类的所有对象都共享的分离变量,必须定义这些测试并在类声明之外初始化。 (有关类和类成员的更多信息,请参见 类。)
是类名声明没有下面的定义,例如 class T;。
是 typedef 语句。
也是定义声明的示例包括:
// Declare and define int variables i and j.
int i;
int j = 10;
// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };
// Declare class CheckBox.
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};
不定义的某些声明为:
extern int i;
char *strchr( const char *Str, const char Target );
定义
定义是对象或变量的,函数、类或枚举数的一个规范。 由于定义必须是唯一的,程序只能包含一个特定程序元素的定义。 可以具有多对一关系的在声明和定义之间。 具有编程元素可以声明但未定义的两种情况:
函数被声明为,但使用引用不要函数调用或用带有函数的地址的表达式。
类在不需要其定义了解的方法使用。 但是,必须声明类。 下面的代码阐释了这样一种情况:
// definitions.cpp class WindowCounter; // Forward reference; no definition class Window { // Definition of WindowCounter not required static WindowCounter windowCounter; }; int main() { }