1.下面是一个头文件:
const int Len = 40;
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);//设置handicap新值
void showgolf(const golf& g);//显示golf结构的内容
注意到setgolf( )被重载,可以这样使用其第一个版本:
golf ann;
setgolf(and, "Ann Birdfree", 24);
上述函数调用提供了存储在ann结构中的信息。可以这样使用其第二个版本:
golf andy;
setgolf(andy);
上述函数将提示用户输入姓名和等级,并将它们存储在andy结构中。这个函数可以(但是不一定必须)在内部使用第一个版本。
根据这个头文件,创建一个多文件程序。其中的一个文件名为golf.cpp,它提供了与头文件中的原型匹配的函数定义;另一个文件应包含main( ),并演示原型化函数的所有特性。例如,包含一个让用户输入的循环,并使用输入的数据来填充一个由golf结构组成的数组,数组被填满或用户将高尔夫选手的姓名设置为空字符串时,循环将结束。main( )函数只使用头文件中原型化的函数来访问golf结构。
golf.h文件:负责声明常量、结构定义、函数声明。
//golf.h
const int Len = 40;
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);//设置handicap新值
void showgolf(const golf& g);//显示golf结构的内容
golf.cpp文件:负责函数原型。
//golf.cpp
#include <iostream>
#include <string>
#include <cstring>
#include "golf.h"
void setgolf(golf& g, const char* name, int hc)
{
strcpy_s(g.fullname, name);
g.handicap = hc;
}
int setgolf(golf& g)
{
using namespace std;
cout << "Enter full name.\n";
cin.getline(g.fullname,Len);
cout << "Enter handicap.\n";
cin >> g.handicap;
cin.get();//清除输入流中的结束符号,防止给下次循环造成 干扰
if ((g.fullname != '\0') && (g.handicap != 0))
return 1;
else
return 0;
}
void handicap(golf& g, int hc)
{
g.handicap = hc;
}
void showgolf(const golf& g)
{
using namespace std;
cout << "Full name: " << g.

这篇博客介绍了基于C++ Primer Plus第六版的编程练习,涉及内存模型和名称空间。内容包括:1. 创建多文件程序,实现头文件中的函数原型;2. 修改程序以使用string对象替换字符数组,简化输入检查;3. 使用定位new运算符创建结构数组并赋值展示;4. 设计包含名称空间的3文件程序,演示交互式和非交互式函数及结构显示。

被折叠的 条评论
为什么被折叠?



