1、C++中的访问控制
Public,private不用介绍,protected,可以被继承的结构访问。
这里重点一提的是protected是专为继承而设计的。Protected在所属类的成员函数和在类的外部函数中对类的对象的可见性与private是一样的——都不可见。而protected只有在继承时才表现出与private的不一致,即protected在子类中是可见的,而private在子类中是不可见的。
2、友元
Friend显式地允许不属于当前结构的一个成员函数访问我的当前结构中的数据(私有数据,即私有成员也可以访问)。一个友元必须在结构内声明,用以让程序员和编译器知道这个数据类型的大小,行为等方面的限制。 声明一个函数时,参数如果传递的是一个地址,则编译器知道这是一个地址,而且有固定大小,而不管传递的对象到底是什么,但是,如果传递的是一个对象,则编译器必须要知道对象的全部定义以确定它的大小以及如何传递。
Friend在声明函数的同时又将它作为struct的友元。即在struct内部进行声明函数和声明该结构的友元的一次性解决。
可以在一个结构体中嵌套的定义另一个结构体,但是还不能自动地实现里层结构体访问外层private成员的权限。定义是必须要遵循以下规则:首先,声明一个嵌套结构,然后将该结构声明为友元,最后,再给出嵌套结构的定义。
友元函数消除了成员函数调用时参数传入、传出时的消耗,但是破坏了类的封装性。
3、类与结构体
一个使用访问控制描述符,并将成员函数和成员变量封装在一起的结构的本质就是一个类,除了,class中的成员默认为private,而struct中的成员默认为public。而对于控制访问的描述符只有编译器知道成员的保护级别,与成员关系的访问控制信息并未传递给连接器,所有的访问控制都是由编译器来完成的,在运行期间对象就是一块存储区域,所以,运行期间不再检查。
4、减少重复编译
在我们的编译环境中,任何文件的改变无论是.cpp文件还是头文件,都要进行重新编译。而若是一个大项目则会严重拖累项目的进度。尤其是在初期,基类的成员常常有所变动,即所谓的“易碎基类“,为了减少这种编译,引入了句柄技术。即在定义某类或者结构时,所有的有关实现的东西都消失了。只剩一个但指针“smile”.该指针指向一个结构,该结构的定义以及所有成员函数的实现都同一的出现在实现文件中。这样,只要接口程序不改变。都问价就不用改变,而实现部分不用任何修改,实现文件修改后只需要重新编译实现文件,然后重新连接到项目即可。
此文为个人学习C++编程思想时个人心得体会,所以,难免有不严谨之处,甚至有可能是错误的理解。如发现错误,或者疑问。欢迎提出讨论,共同学习、进步。