1、类的作用域以外的数据成员和函数成员只能由对象、指针或者引用使用成员访问运算符来访问。作为类内的类型成员,通过作用域运算符访问。在类的外部成员名字被隐藏起来了。
2、如果成员函数的返回类型是在类中定义的,那么在类的外部定义这种成员函数,还要额外指明返回类型是属于哪个类的。若没有指明,则其返回类型是类外的全局作用域的类型。
3、所谓名字查找,即寻找与所用名字最为匹配的声明,其过程是:首先在块中查找,只考虑在名字使用之前的最近的声明,若没找到,则往外层作用域查找,还是没找到,则程序报错。
4、对于类中的成员函数来说,首先会编译类中成员函数的声明,然后当类定义完成后,就是全部可见后,才会编译成员函数的函数体。换句话说,编译器处理完类中所有成员函数的声明后,才会处理成员函数的定义。
5、若类中的成员函数同时处理声明和定义,那么只能在这种成员函数,使用已经定义的或者说已经出现的名字。若某个成员的声明使用了类中尚未出现的名字,那么编译器会在定义该类的作用域继续查找。
6、一般情况下,在内层作用域可以重新定义与外层作用域同名的名字,但是类不行,在类中使用了外层作用域中的名字,并且它代表的是一种类型,那么不能在类中重新定义。有的编译器不会检测到这种错误。
7、类型名一般定义在类的开始处,这样就能保证所有使用该类型的成员,都能出现在类名定义之后。
8、成员函数中的块作用域查找名字的过程:首先在成员函数体内查找,只考虑在名字使用之前出现的声明,若没有则回到成员函数的类中查找,若还是没找到,则在类外进行查找,准确地说是在成员函数定义之前的作用域查找。
9、当成员函数的使用的成员对象隐藏了外层的同名成员对象,那么可以通过作用域运算符访问想使用但是被隐藏的成员。
10、在类外定义成员,名字查找的第三步,不仅要考虑类定义之前的那个全局作用域,还要考虑成员函数定义之前的全局作用域中的声明。