1. member function definitions are processed after the compiler processes all of the declarations in the class;ios
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:this
a) 聚合类的全部成员数据都是public的;spa
b) 聚合类不定义任何构造函数;.net
c) 聚合类没有类内初始化;指针
d) 聚合类没有基类或虚函数;htm
C语言中的大部分结构体均可以看作是聚合类。对象
4. literal class :it
a) 数据成员均是常量的聚合类被称为literal classio
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