本章所有编程练习的工程源码可在此处下载(点击此链接下载),供大家参考交流!
1. 下面是一个头文件:
(……省略……)
注意到setgolf()被重载,可以这样使用其第一个版本:
golf ann;
setgolf(ann, "Ann Birdfree", 24);
上述函数调用提供了存储在ann结构中的信息。可以这样使用其第二个版本:
golf andy;
setgolf(andy);
上述函数将提示用户输入姓名和等级,并将它们存储在andy结构中。这个函数可以(但是不一定必须)在内部使用第一个版本。
根据这个头文件,创建一个多文件程序。其中的一个文件名为golf.cpp,它提供了与头文件中的原型匹配的函数定义;另一个文件应包含main(),并演示原型化函数的所有特性。例如,包含一个让用户输入的循环,并使用输入的数据来填充一个由golf结构组成的数组,数组被填满或用户将高尔夫选手的姓名设置为空字符串时,循环将结束。main()函数只使用头文件中原型化的函数来访问golf结构。
首先,本题提供了头文件golf.h,在该头文件中创建了一个结构名为golf,同时声明了四个函数,需要注意的是有两个函数同名,但输入参数不同,根据题意,这两个函数的功能也有所不同。
golf.h代码如下(题中自带):
// golf.h -- for pe9.1
const int Len = 80;
struct golf
{
char fullname[Len];
int handicap;
};
void setgolf(golf & g, const char * name, int hc);
int setgolf(golf & g);
void handicap(golf & g, int hc);
void showgolf(const golf & g);
那么在此基础上,题目要求我们创建一个多文件程序,其中一个名为golf.cpp,用来提供头文件中声明的函数的函数定义;需要注意的是那两个同名的函数,第一个函数需要输入名称和handicap的值,直接将这两个输入参数赋给golf结构的相应变量即可,因为name是一个char数组,所以需要使用strcpy()函数来赋值,所以也就需要包含<cstring>头文件;而对于第二个同名函数,会提示用户输入姓名和handicap值,赋给相应变量。
golf.cpp代码如下:
// golf.cpp
#include "stdafx.h"
#include "golf.h"
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void setgolf(golf & g, const char * name, int hc)
{
strcpy_s(g.fullname, name);
g.handicap = hc;
}
int setgolf(golf & g)
{
cout << "Please enter the full name of golf player: ";
cin.getline(g.fullname, Len);
if (strcmp(g.fullname, "") == 0)
{
return 0;
}
cout << "Please enter the hanicap of golf player: ";
cin >> g.handicap;
cin.get();
return 1;
}
void handicap(golf & g, int hc)
{
g.handicap = hc;
}
void showgolf(const golf & g)
{
cout << "Here is the golf contents:\n";
cout << "Name: " << g.fullname <<endl;
cout <&