内存模型和名称空间复习题(c++ prime plus )
第一题
注意到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 )的更多相关文章
- 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...
- C++ primer plus读书笔记——第9章 内存模型和名称空间
第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C ...
- 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记
C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...
- [C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单
程序清单9.9(静态存储连续性.无链接性) #include<iostream> using namespace std; ; void strcount(const char *str) ...
- (8)C++ 内存模型与名称空间
一.单独编译 头文件 不要将函数定义或者变量声明放到头文件中,引入多个文件时可能会造成同一个函数定义多次 引入头文件 #include "文件名" File1.h #ifndef ...
- 《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间
1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这 ...
- C++学习 内存模型和名称空间
1.单独编译 C++鼓励程序员将组件函数放在独立的文件中,如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接. 一般非常有用的组织程序的策略是把程序分成三部分: 头文件:包 ...
- C++ Primer Plus读书笔记(九)内存模型和名称空间
1.作用域和链接 int num3; static int num4; int main() { } void func1() { static int num1; int num2; } 上边的代码 ...
- [C++ Primer Plus] 第9章、内存模型和名称空间(二)课后习题
一.复习题 2.using声明和using编译指令的区别 using声明: using std::cin; using std::cout; using std::endl; using编译指令:us ...
- python基础之函数对象,嵌套,名称空间和作用域
函数对象: 函数是第一类对象的含义是函数可以被当作数据处理 函数可用于: def func(): print(‘func’) 1.引用 f = func 把内存地址赋值给f 2.当作参数传给一个函 ...
随机推荐
- uniapp 小程序自定义组件样式穿透问题
1.正在开发时发现自定义组件间样式发生穿透问题 2.主需要引入下面代码可解决 export default { options: { //默认值 isolated(启动隔离) //apply-shar ...
- 使用git下载文件时提示身份验证失败
鼠标右键打开Git Bash Here窗口 输入git clone + 网址 后出现身份报错提示信息 需要重新修改一下用户名和邮箱就可以了 git config --global --replace- ...
- CAD中如何将图形对象快速转换成三维曲面?
天小编将接着上节内容给大家分享浩辰CAD软件中将图形对象快速转换成三维曲面的相关操作技巧,感兴趣的小伙伴可以和一起来了解一下哦! CAD中将图形转换为曲面的操作步骤: 1.用浩辰CAD软件中打开图纸后 ...
- 安装ubuntu后的U盘(tf卡)恢复到之前的状态
sudo fdisk /dev/sdasudo mkfs.vfat /dev/sda 注意: sda是 disk的名字.不同的电脑可能不一样.
- Linux系统配置安装jdk
菜鸟新人搭建服务器,目前不深入原理,只配置 1.官方自行下载Linux版本jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk ...
- IEC104
IEC10X协议源码 https://github.com/airpig2011/IEC104 一.源码编译 下载源代码并解压 进入文件夹下test目录,对main.c进行修改 我们使用套接字来实现服 ...
- mysql数据库连接客户端过多
flush hosts; 清理连接 查看当前连接数 show PROCESSLIST 与 show full PROCESSLIST (查看当前数据库所有连接,包含空闲连接与活跃连接) 查看最大连接数 ...
- nginx配置根据url的参数值进行转发
server { listen 8081; location / { set $tag ""; set $cs "/index/test/test"; prox ...
- vue element-ui form验证中自定义验证方式通过不返回true问题
项目中使用了element-ui的form验证,自定义了手机号的验证规则,验证不通过的时候定义了callback()扔出错误.但是忘了写通过的callback().导致form验证通过拿不到返回的va ...
- vue中v-if控制的可编辑div(contenteditable='true')无法绑定@input事件
<div class="content-container" ref="contentContainer"> <div v-if=" ...