1.在类体中和类体外定义成员函数是有区别的:在类体中定义的成员函数为内联(inline)函数,在类体外定义的不是。内联函数通常不是咱们所指望的,它会将函数调用处用函数体替代,因此我建议在类体内部对成员函数做声明,而在类体外部进行定义,这是一种良好的编程习惯。html
2.static 成员变量编程
static 成员变量属于类,不属于某个具体的对象,这就意味着,即便建立多个对象,也只为 num 分配一分内存,全部对象使用的都是这分内存中的数据。当某个对象修改了 num,也会影响到其余对象。
static 成员变量必须先初始化才能使用,不然连接错误。例如:函数
int Student::num; //初始化
也能够在初始化时赋初值:this
int Student::num = 10; //初始化同时赋值
初始化时能够不加 static,但必需要有数据类型。被 private、protected、public 修饰的 static 成员变量均可以用这种方式初始化。
注意:static 成员变量的内存空间既不是在声明类时分配,也不是在建立对象时分配,而是在初始化时分配。url
static 成员变量既能够经过对象来访问,也能够经过类来访问。经过类来访问的形式为:spa
类名::成员变量;.net
例如:指针
注意:static 成员变量与对象无关,不占用对象的内存,而是在全部对象以外开辟内存,即便不建立对象也能够访问。orm
在类中,static 除了声明静态成员变量,还能够声明静态成员函数。普通成员函数能够访问全部成员变量,而静态成员函数只能访问静态成员变量。咱们知道,当调用一个对象的成员函数(非静态成员函数)时,系统会把当前对象的起始地址赋给 this 指针。而静态成员函数并不属于某一对象,它与任何对象都无关,所以静态成员函数没有 this 指针。既然它没有指向某一对象,就没法对该对象中的非静态成员进行访问。能够说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有 this 指针,而静态成员函数没有 this 指针。由此决定了静态成员函数不能访问本类中的非静态成员。htm