(1)对于const成员函数,从const关键字必须同时出如今声明和定义处,若只出如今一处,就会出现编译时错误。函数
(2)struct关键字和class关键字的区别就是在于默认访问标号不一样。若是类是struct关键字定义的,则在第一个访问标号以前的成员是公有的;若是类是class关键字定义的,则这些成员是私有的。this
(3)类的定义以分号结束。分号是必需的,由于在类定义以后能够接一个对象定义列表。指针
(4)成员函数具备一个附加的隐含参数,即指向该类对象的一个指针,这个隐含指针命名为this,与调用成员函数的对象绑定在一块儿。对象
(5)在普通的非const成员函数中,this的类型是一个指向类类型的const指针,能够改变this所指向的值,可是不能改变this保存的地址;在const成员函数中,thisci
类型是一个指向const类类型的对象的const指针,即不能改变this指向的值,也不能改变this指针保存的地址。编译器
不能从const成员函数中返回指向类对象的普通引用,const成员函数只能返回*this做为一个const引用。it
基于成员函数是否为const,能够重载一个成员函数。编译
(6)可变数据成员:mutable。永远不能为const,甚至当它是const对象的成员时也是如此。const成员函数能够改变mutable成员。table
(7)const构造函数是没必要要的,建立一个类类型的const对象时,运行一个普通的构造函数来初始化该const对象。class
(8)构造函数初始化列表只在构造函数的定义中而不是在声明中定义。执行构造函数分为两个阶段:初始化阶段、普通计算阶段(由构造函数体内的全部语句组成)。
(9)有些成员必须在构造函数初始化列表中进行初始化,对于这样的成员,在构造函数体中对它们赋值不起做用。没有默认构造函数的类类型的任何成员,以及const或引用类型成员,无论是哪一种类型,都必须在构造函数初始化列表中进行初始化。
(10)在构造函数初始化列表中,成员初始化的顺序就是在类中定义成员的次序。因此,须要注意成员初始化列表中各数据成员的次序,按照与成员声明一致的次序编写构造函数初始化列表是个好注意。
(11)一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数了。只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数。
(12)explicit关键字只能用于类内部的构造函数的声明上,在类的定义体外部所作的定义再也不重复它。做用是抑制由单个形参构造函数定义的隐式转换。
(13)友元:容许访问类的非公有成员,同时仍然阻止通常的访问。
(14)static成员是与类相关联的,并不与该类的对象相关联。
static成员函数不能被声明为const,也不能并声明为虚函数。static成员函数没有this指针,它能够直接访问该类的static成员,但不能直接使用非static成员。static关键字出如今类定义体中函数的声明处,外部定义不出现)。
static数据成员必须在类定义体的外部定义,且只能定义一次。不能再类定义体的内部进行初始化。
const static数据成员能够再类定义体内进行初始化,该数据成员仍必须在类定义体外进行定义,但定义时无需在指定初始值。
static数据成员的类型能够是该成员所属类的类型,非static成员被限定声明为其自身类对象的指针或引用。
static数据成员能够做为默认实参,非static数据成员不能用做默认实参,由于它的值不能独立于所属的对象而使用。