1. member function definitions are processed after the compiler processes all of the declarations in the class;
2. our only chance to initialize const or reference data members is in the constructor initializer , also a class type that doesnot have a default constructor.
3. 聚合类的概念 aggregate classes ,这里class的概念包含struct和union:
a) 聚合类的所有成员数据都是public的;
b) 聚合类不定义任何构造函数;
c) 聚合类没有类内初始化;
d) 聚合类没有基类或虚函数;
C语言中的大部分结构体都可以看做是聚合类。
4. literal class :
a) 数据成员均是常量的聚合类被称为literal class
b) 非聚合类只要满足如下条件也是literal class:
数据成员都是常量类型;
类必须至少有一个constexpr 构造器;
必须使用类的默认的析构函数;
如果数据成员有初始化器,此内置数据类型的初始化器必须是一个常量表达式;或者是成员是一个类,初始化器必须是成员函数自己的 constexpr 构造器;
5. constexpr constructor
6. 类的静态成员
a) 静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值;
b) 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象 无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。
c) 静态数据成员的用途之一是统计有多少个对象实际存在。
d) 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的
对像则静态数据成员都要被重新初始化。
e) 对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。 注意:不能用参数初始化表对静态成员初始化。一般系统缺省初始为0。
(1)、static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。
(2)、静态成员不能在类定义里边初始化,只能在class body外初始化。
(3)、静态成员仍然遵循public,private,protected访问准则。
(4)、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。
#include "iostream"
using namespace std;
class test
{
private:
int x;
int y;
public:
static int num;
static int Getnum()
{
x+=5; // 这行代码是错误的,静态成员函数不能调用非静态数据成员,要通过类的对象来调用。
num+=15;
return num;
}
};
int test::num = 10;
int main(void)
{
test a;
cout<<test::num<<endl; //10
test::num = 20;
cout<<test::num<<endl; //20
cout<<test::Getnum()<<endl; //35
cout<<a.Getnum()<<endl; //50
system("pause");
return 0;
}
关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,当同一类的所有对象使用一个量时,对于这个共用的量,可以用静态数据成员变量,这个变量对于同一类的所有的对象都取相同的值。静态成员变量只能被静态成员函数调用。静态成员函数也是由同一类中的所有对象共用。只能调用静态成员变量和静态成员函数。
引用自: http://www.jb51.net/article/41775.htm