第一题

注意到setgolf()被重载,可以这样使用其第一个版本:

golf ann;

setgolf(ann, "Ann Birdfree", 24);

上述函数调用提供了存储在ann结构中的信息。可以这样使用其第二个版本:

golf andy;

setgolf(andy);

上述函数将提示用户输入姓名和等级,并将它们存储在andy结构中。这个函数可以(但是不一定必须)在内部使用第一个版本。

根据这个头文件,创建一个多文件程序。其中的一个文件名为golf.cpp,它提供了与头文件中的原型匹配的函数定义;另一个文件应包含main(),并演示原型化函数的所有特性。例如,包含一个让用户输入的循环,并使用输入的数据来填充一个由golf结构组成的数组,数组被填满或用户将高尔夫选手的姓名设置为空字符串时,循环将结束。main()函数只使用头文件中原型化的函数来访问golf结构。

 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 showgolf(const golf & g);

Golf.cpp

#include <iostream>
#include "golf.h"
#include <cstring>
#include <string> int i=0;
int main()
{
golf H;
golf kl[3];
setgolf(H,"whp",12);
showgolf(H);
while(i < 3&&setgolf(kl[i]))
{
setgolf(kl[i]);
showgolf(kl[i]);
i++; }
return 0;
} void setgolf(golf & g,const char * name,int hc)
{ strcpy(g.fullname, name);
g.handicap=hc;
} int setgolf(golf & g)
{
using namespace std;
cout<<"输入name和handcip"<<endl;
cin.getline(g.fullname,Len);
cout<<"输入name和handcip"<<endl;
cin>>g.handicap;
cin.get();
return 1; }
void showgolf(const golf & g)
{
using namespace std;
cout << "Here is the golf contents:\n";
cout << "Name: " << g.fullname<<endl;
cout << "Handicap: " << g.handicap << endl;
}

第二题:

修改程序清单9.9:用string对象代替字符数组。这样,该程序将不再需要检查输入的字符串是否过长,同时可以将输入字符串同字符串“”进行比较,以判断是否为空行。

#include <iostream>
#include <string>
#include <cstring> using namespace std; void strucount(const string str); int main()
{
string str; char next;
cout<<"Enter a line"<<endl;
getline(cin,str);
while(cin)
{
strucount(str);
cout<<"Enter next line(empty line to quit"<<endl;
getline(cin,str);
if(str=="")
break;
}
cout<<"Bye"<<endl;
return 0;
} void strucount(const string str)
{
using namespace std;
static int total=0;
int count=0;
cout<<"\""<<str<<"\"contains";
while(str[count])
{
count++;
}
total+=count;
cout<<count<<"characters\n";
cout<<total<<"characters total\n";
}

第三题:

编写一个程序,使用定位new运算符将一个包含两个这种结构的数组放在一个缓冲区中。然后,给结构的成员赋值(对于char数组,使用函数strcpy()),并使用一个循环来显示内容。一种方法是像程序清单9.10那样将一个静态数组用作缓冲区;另一种方法是使用常规new运算符来分配缓冲区

#include <iostream>
#include <new>
#include <string>
#include <cstring> using namespace std;
const int BUF=512; struct chaff
{
char dross[20];
int slag;
}; int main()
{ char buffer[BUF];
chaff *p1=new (buffer) chaff[3];
char * p2=new char [BUF];
chaff * p3=new(p2) chaff[3];
char dross[20]={0};
int slag=0,i=0;
while(i<3)
{
cout<<"请输入你的dross和slag"<<endl;
cin.getline(dross,20);
cout<<"请输入你的dross和slag"<<endl;
cin>>slag;
cin.ignore();
strcpy(p1[i].dross,dross);
strcpy(p3[i].dross,dross);
p1[i].slag=p3[i].slag=slag;
i++; }
i=0;
while(i<3)
{
cout<<p1[i].dross<<p1[i].slag<<endl;
cout<<p3[i].dross<<p3[i].slag<<endl;
i++;
}
}

内存模型和名称空间复习题(c++ prime plus )的更多相关文章

  1. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间

    第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...

  2. C++ primer plus读书笔记——第9章 内存模型和名称空间

    第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C ...

  3. 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记

    C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...

  4. [C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单

    程序清单9.9(静态存储连续性.无链接性) #include<iostream> using namespace std; ; void strcount(const char *str) ...

  5. (8)C++ 内存模型与名称空间

    一.单独编译 头文件 不要将函数定义或者变量声明放到头文件中,引入多个文件时可能会造成同一个函数定义多次 引入头文件 #include "文件名" File1.h #ifndef ...

  6. 《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间

    1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这 ...

  7. C++学习 内存模型和名称空间

    1.单独编译 C++鼓励程序员将组件函数放在独立的文件中,如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接. 一般非常有用的组织程序的策略是把程序分成三部分: 头文件:包 ...

  8. C++ Primer Plus读书笔记(九)内存模型和名称空间

    1.作用域和链接 int num3; static int num4; int main() { } void func1() { static int num1; int num2; } 上边的代码 ...

  9. [C++ Primer Plus] 第9章、内存模型和名称空间(二)课后习题

    一.复习题 2.using声明和using编译指令的区别 using声明: using std::cin; using std::cout; using std::endl; using编译指令:us ...

  10. python基础之函数对象,嵌套,名称空间和作用域

    函数对象: 函数是第一类对象的含义是函数可以被当作数据处理 函数可用于: def func(): print(‘func’) 1.引用  f = func  把内存地址赋值给f 2.当作参数传给一个函 ...

随机推荐

  1. (0319) uvm 库的安装编译:

    https://mp.weixin.qq.com/s/jCSp89UYsEZGRU2BN5IloA

  2. go 的 wire 依赖注入

    首先安装 wire 工具 go install github.com/google/wire/cmd/wire@latest go 文件 package main import ( "fmt ...

  3. 使用JFinal实现简单的学生管理系统

    JFinal简介 Controller是JFinal核按心类美之一,该类作为MVC模式中的控制器.基于JFinal的Web应用的控制器需要继承该类.Controller是定义Action方法的地点,是 ...

  4. 2022NCTF

    是真的菜 开始复现把 calc 访问之后获得源码 @app.route("/calc",methods=['GET']) def calc(): ip = request.remo ...

  5. CentOS 7 安装步骤以及初始化

    2. 虚拟机分配的资源 因为用的软件不一样,这里设置方法无法截图,但大至如下: 2CPU/1G内存/200G硬盘 去掉打印机等没用的硬件(macOS要去掉打印机和摄像头) 光盘开始选择空白光盘,不要在 ...

  6. ORCAD中,怎么一次性去掉所有元器件下面的下划线呢

    选择元器件,右键找到unset单击就可以去掉了

  7. npm 更改在线仓库镜像地址

    node 安装后,npm 的默认在线仓库镜像地址为: https://registry.npmjs.org/ 使用 npm get registry 命令可以获取到: 为了使用 npm 能够更快的下载 ...

  8. Java调用Kettle

    Java 调用 kettle,难的不是怎么调用,而是解决 maven 依赖冲突问题,直接将 kettle 依赖,添加到我们的 maven 工程,可能会导致代码大范围报错:解决方案也很简单,就是直接从 ...

  9. ListView,ScrollView,RecyclerView上下滑动监听

    在项目中有这样需求要对ListView或ScrollView或RecyclerView滚动进行监听,来做一些处理,下面来看对应实现 一:Listview上下滑动监听 通过实现AbsListView.O ...

  10. yolov4 编译

    参考教程:https://blog.csdn.net/weixin_45102257/article/details/108872951 问题: ![image](https://img2022.cn ...