首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.7  自测习题答案

1. 私有成员。

2. 类的所有使用者都可以使用类的公有成员。成员函数经常声明为公有,以便使用者能够调用这些函数来操作类的实例。

3. true和false。

4. 类是一种数据类型,它定义了数据成员以及操作这些数据的成员函数。对象是类的一个实例,并声明为一个变量。一旦定义了一个类,程序员就能够声明许多类的对象,并使用类的函数来操作这些对象。

5. 常量成员函数不能对对象的成员变量做任何修改。

6. 生存空间解析操作符用在每个成员函数实现的前面。参考2.1节中的使用生存空间解析操作符的示例。

7. 程序应当包含下列语句:

throttle exercise;

exercise.shut_off( );

exercise.shift(3);

cout << exercise.flow( ) << endl;

8. 新成员函数的原型放在类定义中。函数实现如下:

bool throttle::is_above_half( ) const

// Precondition: shut_off has been called at

// least once to initialize the throttle.

// Postcondition: The return value is true if

// the current flow is above 0.5.

{

    return (flow( ) > 0.5);

}

9. 在类定义的公有段中:

bool is_above_half( ) const

    { return (flow( ) > 0.5); }

10. 编译器会自动创建一个简单的默认构造函数。

11. 应当去掉关键字void。构造函数没有返回类型。

12. 新构造函数的原型放在类定义中。构造函数的实现如下:

throttle::throttle

(int size, int initial)

// Precondition: (0 < size) and

// (0 <= initial <= size).

// Postcondition: The throttle has size

// positions above the shutoff position, and

// it is currently in the position given by the

// parameter initial.

// Libraries used: cassert

{

    assert(size > 0);

    assert(initial >= 0);

    assert(initial <= size);

    top_position = size;

    position = initial;

}

13. 有关使用类所需要的全部信息都放在头文件前面的注释中。

14. 宏保护用于防止意外的重复类定义。通常,如果程序多次包含同一个头文件,编译将会失败。宏保护用于指导编译器跳过重复的类定义。

15. 自动赋值操作符将会复制x的成员变量到y中。

16. 自动复制构造函数将会把y初始化为x的一个副本(通过复制成员变量)。

17. #include "throttle.h"

using namespace main_savitch_2A;

18. 提示:将当前角度设为一个私有成员变量,并予以跟踪。如果变量小于零,或者>=360,那么重新调整该变量,使它始终位于0~360之间。

19. 参考图14-1获取部分解决方案。

20. 对于任意数据项,如果它没有被显式地置于一个命名空间中,那么它将成为全局命名空间的一部分;在使用这类数据项时,不需要using语句或生存空间解析操作符。

21. 绝不能把using语句放在头文件中;使用第三种形式。

22. 将构造函数的原型修改如下:

throttle(int size = 1, int initial = 0)

不再需要另外两个构造函数。

23. rotate_to_upper_right能够改变p,因为它的参数是引用参数。但是调用rotations_needed不能改变p,因为它使用的是值参数。

24. 函数参数列表中的参数指的是形参,它与函数调用期间传递给函数的值相区别。实参指的就是传递的值。

25. 如果希望实参保持不变,x应当为一个值参数。如果希望通过改变x来影响实参,x应当为一个引用参数。x不能作为常量引用参数,因为函数体内修改了这一参数。

26. 对于大型数据类型来说,值参数是低效的,因为要复制它们的值。然而,引用类型也是不安全的,因为它们可以被改变。常量引用参数通过提供不能被修改的引用参数,提供了最好的解决方案。

27. 实现如下:

int operator < (

    const throttle& t1,

    const throttle& t2,

)

// Postcondition: The return value is true if

// the flow of t1 is less than the flow of t2.

{

    return (t1.flow( ) < t2.flow( ));

}

28. 答案与2.5.2节中的重载操作符+相同,但要将加号替换为减号。

29. 这条建议支持信息隐藏,因为实现类的程序员是唯一了解私有成员的人。

30. 友元函数并不是被类的特定对象激活,因此,友元函数访问的成员变量之前必须要有对象变量的名称,如下所示:

ins >> target.x >> target.y;

31. 实现如下(自行添加后置条件):

ostream& operator << (

    ostream& outs,

    const throttle& source

)

{

    outs << 100*source.flow( ) << '%';

    return outs;

}

32. newpoint.cxx的顶部包含一则简短的注释,表明有关如何使用point类的文档说明放在头文件中。函数实现位于这则注释之后,其中包括图2-19中列出的所有函数(不包括get_x和get_y,因为它们是内联函数)。这些函数的实现必须位于一个命名空间分组中。在头文件中,使用了命名空间main_savitch_2B,以避免与初期的point类(位于命名空间main_savitch_2A中)发生冲突。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论