C++ Primer 12章读书笔记
时间:2011-03-27 来源:老钟古
记录下自己的学习笔记和一些相应的常见问题,有错误的地方欢迎指正。
问题1、在类内部定义和类外部定义的成员函数有什么区别?
答:在类内部定义的成员函数默认是为inline(内联)函数,而在外部定义的成员函数需要加上类的作用域和默认其不是inline函数。
问题2、怎么定义成员函数为const成员函数?
答:const成员不能改变其所操作的对象的数据成员,当声明在类的内部和定义在类的外部时,const必须同时出现在声明和定义中。
问题3、类的背后蕴涵里什么思想?
答:类背后蕴涵的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程和设计技术;封装是一项将低层次的元素组合起来形成新的、高层次实体的技术。数据抽象使得使用该类的程序员不必了解其细节,使用其接口就可以了。而类的设计者则需要考虑类的实现细节。比如标准库的使用。
问题4、类通过什么方式来实现抽象和封装?
答:类是通过访问标号来实现这种技术的,一般来说类有三种访问标号private、public、protected,private封装了类型的实现细节,程序的所有部分都可以访问带有public标号的成员,protected一般是在有基类和继承类中才会使用。类如果是用struct关键字定义的,则默认的访问标号是public的,类是用class关键字定义的,则默认的访问标号是private的。访问标号的出现次数并没有限制和其出现的位置也没有,一种访问标号的作用域随着另外一种访问标号的出现或者到类的定义结束之处。
问题5、数据抽象和封装带来了什么好处?
答:(1)避免类内部出现无意的、可能破坏对象状态的用户级错误;
(2)随时间推移可以根据需求改变或缺陷报告来完善类实现,而无须改变用户级代码,这个对于维护都是很有帮助的。
问题6、成员函数是否可以被重载?
答:成员函数是可以被重载的,但只能重载本类的其他成员函数,重载的成员函数和普通函数应用相同的规则:两个重载成员的形参数量和类型不能够完全相同。
问题7、当要编写相互依赖的类时,应该怎么做?
答:这时候可以用前向声明一个类,此时的类为一个不完全类型,使用是要注意不完全类型只能用于定义指向该类型的指针及引用,或者用于声明使用该类型作为形参类型或返回类型的函数,主要原因是因为不完全类型并没有定义,不知道其所占的空间是多大,指针和引用一般都是4个字节(32位机器)。
问题8、非const成员函数和const成员函数返回的*this有什么区别?
答:在普通的非const成员函数中,this类型是一个指向类类型的const指针,可以改变this所指向的值,但不能改变this所保存的地址,在const成员函数中,this的类型是一个指向const类型对象的const指针。此时既不能够改变this所指向的对象,也不能够改变this所保存的地址。