《C++ Primer Plus》第八章习题与参考答案

本文详细解答了《C++ Primer Plus》第六版第八章的复习题与编程练习,涵盖内联函数、函数重载、模板函数、默认参数等多个知识点,并提供了实例代码和应用场景。
摘要由CSDN通过智能技术生成

1,内容选自《C++ Primer Plus》(第6版)中文版,2017年1月河北第21次印刷版本
2,文章系笔者学习笔记,若有错误,欢迎指正
3,如有雷同,纯属巧合

8.7 复习题

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

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

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

void song(const char* name, int times);

a.如何修改原型,使times的默认值为1?
b.函数定义需要做哪些修改?
c.能否为name提供默认值"O. My Papa"?

a. void song(const char* name, int times = 1);
b. 不需要。只有原型包含默认值的信息。
c. 可以,如果保留times的默认值:
void song(const char* name = “O. My Papa”, int times);

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

//可以使用字符串"\""或字符'"'来打印引号,下面的函数演示了这两种方法。
void iquote(int i)
{
   
  cout << "\"" << i << "\"";
}

void iquote(double d)
{
   
  cout << '"' << d << '"';
}

void iquote(const char *str)
{
   
  cout << "\"" << str << "\"";
}

4.下面是一个结构模板:

struct box{
   
  char maker[40];
  float height;
  float width;
  float length;
  float volume;
};

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

//a
void show(const box &b)
{
   
  cout << "maker:" << b.maker << " "
       << "height" << b.height << " "
       << "width" << b.width << " "
       << "length" << b.length << " "
       << "volume" << b.volume;
}
//b
void set_volume(box &b)
{
   
  b.volume = b.height * b.width * b.length;
}

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

#include <array>
#include <iostream>
#include <string>
const int Seasons = 4;
const std::array<std::string, Seasons> Snames = {
   "Spring", "Summer", "Fall", "Winter"};
//首先,将函数原型修改为指针引用.
void fill(std::array<double, Seasons> &pa);
void show(const std::array<double, Seasons> &da);
//注意,show()应使用const,以禁止修改对象.

int main()
{
   
  std::array<double, Seasons> expenses;
  //修改fill函数调用
  fill(expenses);
  show(expenses);
  system("PAUSE");
  return 0;
}

//函数头修改为引用参数
void fill(std::array<double, Seasons> &pa)
{
   
  using namespace std;
  for (int i = 0; i < Seasons; i++)
  {
   
    cout << "Enter " << Snames[i] << " expenses: ";
    //修改为更简单的pa[i]
    cin >> pa[i];
  }
}

//函数头修改为引用参数
void show(const std::array<double, Seasons> &da)
{
   
  using namespace std;
  double total = 0.0;
  cout << "\nEXPENSES\n";
  for (int i = 0; i < Seasons; i++)
  {
   
    cout << Snames[i] << ":$" << da[i] << endl;
    total += da[i];
  }
  cout << "Total Expenses: $" << total << endl;
}

6.指出下面每个目标是否可以使用默认参数或函数重载完成,或者这两种方法都无法完成,并提供合适的原型。
a.mess(density,volume)返回密度为density、体积为volume的物体的重量,而mess(density)返回密度为density、体积为1.0立方米的物体的重量。这些值的类型都为double。

//a.通过为第二个参数提供默认值:
double mess(double density, double volume = 1.0);
也可以通过函数重载:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值