声明( declaration
)是告诉编译器某个东西的名称和类型( type ),但略去细节。
下面是声明的例子:
extern int x; //对象(object )声明size_t numDigits( int number ); //函数声明( function ) 声明
class Widget; //类( class )声明
template<typename T>
class GraphNode; //类模版( template )声明
template<typename T>
T function( T number1, T number 2); //函数模版声明
定义( definition
)是提供编译器一些声明所遗留的细节。
对对象( object
)而言,定义是编译器为此对象分配内存。
对函数( function ) 或 函数模版(
function template ) 而言,定义是提供代码本体。
对类( class ) 或 类模版(
class template )而言,定义列出他们的成员。
下面是定义的例子:
int x; //对象的定义size_t numDigits( int number ) //函数的定义
{
//do something
return 1;
}class Widget //类的定义
{
public:
Widget();
~Widget();
…
}template< typename T > //类模版的定义
class GraphNode
{
public:
GraphNode();
~GraphNode();
….
}template<typename T>
T function( T number1, T number 2) //函数模版的定义
{
return number1 + number2;
}
初始化(
Initialization )是”给予对象初值”的过程。
对用户自定义类型的对象而言,初始化由构造函数执行。默认( default
)构造函数是一个可被调用而不带任何参数,这样的默认构造函数要么没有参数,要么就是每个参数都有缺省值。
class A
{
public:
A(); //默认构造函数
};class B
{
public:
explicit B( int x=0, bool b=true ); //默认构造函数};
class C
{
public:
explicit C( int x ); //不是默认构造函数,是带参数的构造函数
};
上述的 class B 和 class C的构造函数都被声明为 explicit, 关于
explicit,请参考explicit浅谈。它可用来阻止隐式转换( implicit type conversions
)为了防止隐式使用拷贝构造函数,但仍可以进行显示类型转换( explicit type conversions );
C++术语,码迷,mamicode.com