5.8 练习

部分练习题的答案可以在本书的电子文档“Annotated Solution Guide for Thinking in C++”中找到,只需支付很少的费用就可以从http://www.BruceEckel.com得到这个电子文档。

5-1 创建一个类,具有public、private和protected数据成员和函数成员。创建该类的一个对象,看看当试图访问所有的类成员时会得到一些什么编译信息。

5-2 写一个名为Lib的struct,包括三个string对象a、b和c。在函数main()中创建一个Lib对象x,对x.a、x.b、x.c赋值并打印出这些值。再用数组string s[3]代替a、b、c。你将会看到由于这种改变,函数main()中的代码出错。另外再创建一个名为Libc的类,有三个私有的string对象a、b、c以及成员函数seta()、geta()、setb()、getb()、setc()和getc(),这些成员函数用来设置和得到三个私有成员的值。像上面那样写一个函数main(),现在把private string对象a、b、c变成一个private数组string s[3]。这样你将会看到即使有这种改变,函数main()中代码照样执行。

5-3 创建一个类和一个全局friend函数来处理类的private数据。

5-4 编写两个类,每个类都有一个成员函数,该函数中把一个指针指向另一个类的一个对象。在函数main()中创建两个实例对象,调用前面每一个类中的成员函数。

5-5 创建三个类。第一个类包括private数据,并且整个第二个类和第三个类的成员函数是它的友元,在函数main()中演示一下它们是如何正确运行的。

5-6 创建一个Hen类,在该类中,嵌套一个Nest类,在Nest类中,有一个Egg类成员。每一个类都有一个成员函数display(),在函数main()中创建每一个类的实例,然后调用每一个类的display()函数。

5-7 修改练习6中类Nest和类Egg,使它们都包含private数据,通过声明友元使套装类能够访问这些private数据。

5-8 创建一个有很多数据成员的类,这些数据成员分布在由public、private和protected所指定的区域中。增加一个成员函数showMap(),该成员函数打印这些数据成员的名字和它们的地址。如果有可能,在多个编译器、计算机或者操作系统中编译并运行这个程序,看目标代码中布局是否一样。

5-9 拷贝第4章中针对Stash的实现和测试文件,在本章中编译并测试Stash.h。

5-10 把来自练习6中Hen类的对象放到结构Stash中,取出并打印它们(如果还没有做,必须增加函数Hen:print())。

5-11 拷贝第4章中针对Stack的实现和测试文件,在本章中编译并测试Stack2.h。

5-12 把来自练习6中Hen类的对象放到结构Stack中,取出并打印它们(如果还没有做,必须增加函数Hen:print())。

5-13 修改Handle.cpp中的结构Cheshire,检验工程管理员是否只对这个文件进行了重新编译和重新连接,而不重新编译UseHandle.cpp。

5-14 使用“Cheshire cat”技术创建类StackOfInt(一个存放整型数的堆栈),该技术隐藏了用于存储类StackImp中的元素的低级数据结构。实现StackImp有两种方法:一种是使用固定长的整型数组,另一种是使用vector<int>。在第一种方法中,由于通过预先调整设置了堆栈的最大尺寸,不必担心数组扩展。注意类StackOfInt.h不必随StackImp一起改变。