所有成员必须放在类的内部声明。好处是编译的时候就能知道分配多大的储存空间。、
const必须同时出现在类成员声明和定义处(包括函数后面的const)。与它刚好相反的是static,只能在放在声明处(如果放在了定义处,和C语言中static 表示internal linkage的含义有冲突了)。
inline只是一个编译提示,具体参见:[url]http://www.informit.com/blogs/30-C-Tips-in-30-Days-Tip-3-inline-Dos-and-Donts-[/url]
class定义后面必须加上分号是为了和struct保持一致,class后面能够定义变量。例如:
class Sales_item{/*......*/} accum,trans;
在const成员函数中,this的类型是一个指向const类类型对象的const指针。因此不能从const成员函数返回指向类对象的普通引用。
构造函数不能声明为const。
和java不一样,非static的类数据成员的初始化只能放在初始化列表(ctor initializer)中,在构造函数体执行前执行。
ctor initializer只在构造函数的定义中而不是声明中指定。
在ctor initializer中没有显示提及的每个成员,都使用与初始化变量相同的规则:对于类类型的成员,如果初始化列表没有显示初始化,则会隐式调用这些成员的默认构造函数,对于内置和复合类型,成员的初始值依赖于对象的作用域。
ctor initializer的执行顺序是定义成员的次序(这一点和java相同)。
和java不一样的是c++的构造函数之间的调用。例如:
java中this()必须写在第一行,c++没有这个限制。
c++和c语言中一样,能够在函数内部声明函数,这一点造成了用一个默认构造函数初始化一个命名对象时,不能加上(),否则编译器会把它当成了一个函数声明。
对于static的数据成员,在类内部的说明只是declare而不是define,它们的定义放在类定义外部(成员定义隐含分配存储空间的意思,static成员的存储空间不属于它所在的class)。比较特殊的是integral or const enumeration类型的static const成员,它们的定义可以写在class定义的内部,但为了统一,建议还是在外部定义static成员。
刚看完这个的时候有点马虎,以为所有的static const成员都能够在类内部初始化,于定义了一个int数组,死活不能通过编译,把定义放在类外部就可以了
const必须同时出现在类成员声明和定义处(包括函数后面的const)。与它刚好相反的是static,只能在放在声明处(如果放在了定义处,和C语言中static 表示internal linkage的含义有冲突了)。
inline只是一个编译提示,具体参见:[url]http://www.informit.com/blogs/30-C-Tips-in-30-Days-Tip-3-inline-Dos-and-Donts-[/url]
class定义后面必须加上分号是为了和struct保持一致,class后面能够定义变量。例如:
class Sales_item{/*......*/} accum,trans;
在const成员函数中,this的类型是一个指向const类类型对象的const指针。因此不能从const成员函数返回指向类对象的普通引用。
构造函数不能声明为const。
和java不一样,非static的类数据成员的初始化只能放在初始化列表(ctor initializer)中,在构造函数体执行前执行。
ctor initializer只在构造函数的定义中而不是声明中指定。
在ctor initializer中没有显示提及的每个成员,都使用与初始化变量相同的规则:对于类类型的成员,如果初始化列表没有显示初始化,则会隐式调用这些成员的默认构造函数,对于内置和复合类型,成员的初始值依赖于对象的作用域。
ctor initializer的执行顺序是定义成员的次序(这一点和java相同)。
和java不一样的是c++的构造函数之间的调用。例如:
class A{
public:
A():i(2){}
A(int i):i(i){
this->i+=2;
A();
}
int i;
};
A a(1); //只执行A(int i):i(i)的ctor initializer。A();被当成了普通函数处理。
java中this()必须写在第一行,c++没有这个限制。
c++和c语言中一样,能够在函数内部声明函数,这一点造成了用一个默认构造函数初始化一个命名对象时,不能加上(),否则编译器会把它当成了一个函数声明。
string s(); //声明了一个名为s,无参数,返回值为string类型的一个函数
对于static的数据成员,在类内部的说明只是declare而不是define,它们的定义放在类定义外部(成员定义隐含分配存储空间的意思,static成员的存储空间不属于它所在的class)。比较特殊的是integral or const enumeration类型的static const成员,它们的定义可以写在class定义的内部,但为了统一,建议还是在外部定义static成员。
刚看完这个的时候有点马虎,以为所有的static const成员都能够在类内部初始化,于定义了一个int数组,死活不能通过编译,把定义放在类外部就可以了
class A{
public:
static const int i[];
static const int i[]={1,2}; // error
};
const int A::i[]={1,2};