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