11、根据上述规定,可以得出:有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数体重对它们初始化不起作用。没有默认构造函数的类类型的成员,const或者引用类型成员必须在构造函数初始化列表中进行初始化,而不能在构造函数函数体中进行赋值初始化。

  12、数据成员初始化的顺序和数据成员声明的顺序一致,而不是根据构造函数的初始化列表的顺序一致。

  13、只要定义一个对象时没用提供初始化式,使用了该类的默认构造函数。如:A a;使用的是默认构造函数,而A a(37);表示使用了其他构造函数。

  14、只有类没有定义构造函数时,编译器才会自动生成一个默认构造函数。

  15、单个实参调用的构造函数定义了从形参类型到该类类型的一个隐式转换。如:

class Sales_item{
         public:
                   sales_item(const std::string &book=””):isbn(book),unit(0),revenue(0.0){}
                   void same_isbn(Sales_item si);
};
//当使用对象调用
Sales_item item;
Item.same_isbn(“123556”);
//会调用sales_item的单形参的构造函数实例化一个新对象,然后传给same_isbn做实参。从而实现隐式转换。若要避免隐式转换,要在构造函数声明前加上expl//icit,explicit用于类内部的构造函数声明上,在类定义体外部不再重复。

  16、友元只能出现在类定义的内部。

  17、当我们在类外部定义static成员时,无需重复指定static保留字,该保留字只出现在类定义体内部声明处。static成员函数不能被声明为const,因为const是承诺不会修改该函数所属对象的数据成员,但是static 不属于任何对象,static不能声明为虚函数。static成员可以通过作用域操作符,对象,引用或指向该类类型的对象的指针调用。

  18、static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。

  19、当static成员在类外部定义时,static只写在类定义体内部的声明处。

  20、static数据成员只能定义在类定义体外部,并且进行初始化,static只能在声明处标识。因为普通数据成员不能在类的定义体中初始化,但static成员定义时必须初始化,所以只能定义在定义体外部。

  21、const static数据成员可以在类定义体内部进行初始化,但是数据成员必须在类定义体外部进行定义。只是在类内部初始化时,数据成员的定义不再指定初始值。

  22、static数据成员可以做默认实参,其他数据成员不可以。

  23、static数据成员的类型可以是该类成员所属的类型,如:

class Bar{
         public:
         private:
                   static Bar men1;//ok
                   Bar * men2;//ok
                   Bar men3;//error
};