第一题

注意到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. 视频直播源码,js实现节流和防抖

    视频直播源码,js实现节流和防抖 防抖: 就是指连续触发事件但是在设定的一段时间内中只执行最后后一次,例如:设定1000毫秒执行,当你触发事件了,他会1000毫秒后执行,但是在还剩500毫秒的时候你又 ...

  2. Net Core 3.1 ONVIF 操控海康摄像头

    先给出实现的代码 https://github.com/lu1770/onvif-client.git 也可以通过安装包来使用功能 dotnet add package Onvif 基本用法 Agen ...

  3. 通过系统函数分配内存sbrk/sbrk

    #include <unistd.h> #include <stdio.h> int main(void) { printf("================brk ...

  4. synchronized与CAS

    参考:java3y<对线面试官> synchronized synchronized是⼀种互斥锁,⼀次只能允许⼀个线程进⼊被锁住的代码块synchronized是Java的⼀个关键字,它能 ...

  5. Doris使用记录

    创建分区表: CREATE TABLE `test_partitioned` ( `gmt_create` datetime NULL COMMENT "创建时间", `colum ...

  6. maven静态资源过滤

    <resources> <resource> <directory>src/main/java</directory> <includes> ...

  7. 【git】2.3查看提交历史

    资料来源 (1) https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4% ...

  8. SQL自动生成表结构Excel说明文档

    针对已经存在表结构,快速生成整理表结构文档. SELECT字段中文名 = isnull(G.[value],''),字段名 = A.name,类型 = B.name,标识 = Case When CO ...

  9. Python游戏开发常用库

    PyWeek:编程挑战,主要是Python游戏开发方面的 PyGame:PyGame在优秀的SDL库之上添加了更多功能.允许使用python语言创建功能齐全的游戏和多媒体程序.具有高度的可移植性,几乎 ...

  10. WPF_MVVM框架(5)

    1.NuGet引用MVVM框架包 引入该框架包之后, 默认会在目录下创建ViewModel层的示例代码 2.第二步, 通过在MainViewModel中创建一些业务代码, 将其与MainWindow. ...