当前位置:   article > 正文

C++primer Plus 复习题_c++primer plus复习题

c++primer plus复习题

1、哪种函数适合定义为内联函数

只有一行代码的小型、非递归函数适合作为内联函数。

2、假设song()函数的原型如下

  1. void song (const char* name, int times);
  2. //a、如何修改原型,使times的默认值为1
  3. void song (const char* name, int times = 1);
  4. //b、函数定义需要做哪些修改?
  5. 不需要。
  6. //c、能否为name提供默认值“O.My Papa"
  7. void song (const char* name = "O.My Papa", int times);

3、编写iquote()的重载版本——显示其用双引号括起的参数。编写3个版本:一个用于int参数,一个用于double参数,另一个用于string参数。

  1. void iquote(int i)
  2. {
  3. cout << i <<endl;
  4. }
  5. void iquote(double i)
  6. {
  7. cout << i <<endl;
  8. }
  9. void iquote(string i)
  10. {
  11. cout << i <<endl;
  12. }

4、下面是一个结构模板

  1. struct box {
  2. char maker[40];
  3. float height;
  4. float width;
  5. float length;
  6. float volume;
  7. }

a、请编写一个函数,它将box结构的引用作为参数,并显示每个成员的值

b、请编写一个函数,它将box结构的引用作为参数,并将volume成员设置为其他3项的乘积。

  1. //a
  2. void show(const box &b)
  3. {
  4. cout << "maker:" << b.maker << " "
  5. << "height" << b.height << " "
  6. << "width" << b.width << " "
  7. << "length" << b.length << " "
  8. << "volume" << b.volume;
  9. }
  10. //b
  11. void set_volume(box &b)
  12. {
  13. b.volume = b.height * b.width * b.length;
  14. }

5、为让函数fill()和show()使用引用参数,需要对程序清单7.15做那些修改

  1. #include <array>
  2. #include <iostream>
  3. #include <string>
  4. const int Seasons = 4;
  5. const std::array<std::string, Seasons> Snames = {"Spring", "Summer", "Fall", "Winter"};
  6. //首先,将函数原型修改为指针引用.
  7. void fill(std::array<double, Seasons> &pa);
  8. void show(const std::array<double, Seasons> &da);
  9. //注意,show()应使用const,以禁止修改对象.
  10. int main()
  11. {
  12. std::array<double, Seasons> expenses;
  13. //修改fill函数调用
  14. fill(expenses);
  15. show(expenses);
  16. system("PAUSE");
  17. return 0;
  18. }
  19. //函数头修改为引用参数
  20. void fill(std::array<double, Seasons> &pa)
  21. {
  22. using namespace std;
  23. for (int i = 0; i < Seasons; i++)
  24. {
  25. cout << "Enter " << Snames[i] << " expenses: ";
  26. //修改为更简单的pa[i]
  27. cin >> pa[i];
  28. }
  29. }
  30. //函数头修改为引用参数
  31. void show(const std::array<double, Seasons> &da)
  32. {
  33. using namespace std;
  34. double total = 0.0;
  35. cout << "\nEXPENSES\n";
  36. for (int i = 0; i < Seasons; i++)
  37. {
  38. cout << Snames[i] << ":$" << da[i] << endl;
  39. total += da[i];
  40. }
  41. cout << "Total Expenses: $" << total << endl;
  42. }

6、指出下面每个目标是否可以使用默认参数或函数重载完成,或者这两种方法都无法完成,并提供合适的原型,

a.mess(density,volume)返回密度为density、体积为volume的物体的重量,而mess(density)返回密度为density、体积为1.0立方米的物体的重量。这些值的类型都为double。

  1. //a.通过为第二个参数提供默认值:
  2. double mess(double density, double volume = 1.0);
  3. 也可以通过函数重载:
  4. double mess(double density, double volume);
  5. double mess(double density);

b.repeat(10,“I’ am OK”)将指定的字符串显示10次,而repeat(“But you’re kind of stupid”)将指定的字符串显示5次。

  1. //不能为重复的值使用默认值,因为必须从右到左提供默认值。可以使用重载:
  2. void repeat(int num, const char *str);
  3. void repeat(const char *str, int num = 5);

c.average(3,6)返回两个int参数的平均值(int类型),而average(3.0,6.0)返回两个double值的平均值(double类型)

  1. //可以使用函数重载:
  2. int average(int, int);
  3. double average(double, double);

d.mangle(“I’am glad to meet you”)根据是将值赋给char变量还是char*变量,分别返回字符I和指向字符串"I’am glad to meet you"的指针。

不能这样做,因为两个版本的特征标将相同。
7、编写返回两个参数中较大值的函数模板

  1. template<typename T>
  2. T Max(T a, T b) {
  3. return a > b ? a : b;
  4. }

8.给定复习题6的模板和复习题4的box结构,提供一个模板具体化,它接受两个box参数,并返回体积较大的一个

  1. template <>
  2. box max(box b1, box b2)
  3. {
  4. return b1.volume > b2.volume ? b1 : b2;
  5. }

9.在下述代码(假定这些代码是一个完整程序的一部分)中,v1、v2、v3、v4和v5分别是哪种类型?

  1. int g(int x);
  2. ...
  3. float m = 5.5f;
  4. float &rm = m;
  5. decltype(m) v1=m;
  6. decltype(rm) v2=m;
  7. decltype((m)) v3=m;
  8. decltype(g(100)) v4;
  9. decltype(2.0 * m) v5;
  1. v1:float
  2. v2:float&
  3. v3:float&
  4. v4:int
  5. v5:double
  6. /*decltype(exp) varname;
  7. 针对v3为啥是float&
  8. 如果 exp 是一个左值,或者被括号( )包围,那么 decltype(exp) 的类型就是 exp 的引用;假设 exp 的类型为 T,那么 decltype(exp) 的类型就是 T&。*/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/497670
推荐阅读
相关标签
  

闽ICP备14008679号