[C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单
程序清单9.9(静态存储连续性、无链接性)
#include<iostream>
using namespace std; const int Size=;
void strcount(const char *str){//const表示str指针不能修改指向的内容(不过可以指向另外一块内容)
static int total=;//static静态变量,首次初始化后,其值一直存在(即第二次调用strcount函数时,total的值不会再次初始化)
int count=;
cout<<"\""<<str<<"\" contains ";
while (*str++)//先判断*str是否为NULL,然后再str++
count++;
total+=count;
cout<<count<<" characters\n";
cout<<total<<" characters total!\n";
} void main() {
char in[Size];
char next;
cout<<"Enter a line:"<<endl;
cin.get(in,Size);//最多接收Size-1个字符+1个'\0'
while (cin) // ==while(!cin.fail()),即读入流成功
{
cin.get(next);
while(next!='\n') //若next不是换行符
cin.get(next);
strcount(in);
cout<<"Enter next line (empty line to quit):\n";
cin.get(in,Size);
}
cout<<"Bye!"<<endl;
system("pause");
}

程序清单9.10(常规new和定位new运算符)
#include<iostream>
#include<new> //定位new运算符
using namespace std; const int BUF=;
const int N=;
char buff[BUF]; void main() {
double *p1,*p2;
int i;
cout<<"Calling"<<endl;
p1=new double[N];//常规new:p1是double指针
p2=new (buff) double[N];//定位new运算符:将数组p2放在了数组buff中
for (i = ; i < N; i++)
p2[i]=p1[i]=+20.0*i;
cout<<"Memory addresses:"<<endl<<" heap: "<<p1<<" static: "<<(void *)buff<<endl;//buffer是char指针,所以要使用(void *)对buffer进行强转,否则将显示字符串
cout<<"Memory contents:"<<endl;
for (i = ; i < N; i++)
{
cout<<p1[i]<<" at "<<&p1[i]<<";";
cout<<p2[i]<<" at "<<&p2[i]<<endl;
} cout<<"\nCalling new"<<endl;
double *p3,*p4;
p3=new double[N];
p4=new (buff) double[N];
for (i = ; i < N; i++)
p4[i]=p3[i]=+40.0*i;
cout<<"Memory contents:"<<endl;
for (i = ; i < N; i++)
{
cout<<p3[i]<<" at "<<&p3[i]<<";";
cout<<p4[i]<<" at "<<&p4[i]<<endl;
} cout<<"\nCalling new third"<<endl;
delete [] p1;
p1=new double [N];
p2=new (buff+N*sizeof(double)) double[N];
for (i = ; i < N; i++)
p2[i]=p1[i]=+60.0*i;
cout<<"Memory contents:"<<endl;
for (i = ; i < N; i++)
{
cout<<p1[i]<<" at "<<&p1[i]<<";";
cout<<p2[i]<<" at "<<&p2[i]<<endl;
}
//buff指定的内存是静态内存,所以不能delete
delete [] p1;
delete [] p3; system("pause");
}

程序清单9.11-13(名称空间示例)
namesp.h 头文件
#include<string>
namespace pers{ //包含Person结构的定义和两个函数原型
struct Person{
std::string fname;
std::string lname;
};
void getPerson(Person &);//引用
void showPerson(const Person &);
} namespace debts{ //定义Debt结构,用于存储人名和金额,使用using编译指令,让pers中的名称在debts空间也能使用
using namespace pers;
struct Debt{
Person name;
double amount;
};
void getDebt(Debt &);
void showDebt(const Debt &);
double sumDebts(const Debt ar[],int n);
}
namesp.cpp 函数定义
#include<iostream>
#include<string>
#include "namesp.h"//自己编写的头文件只能使用引号"",系统自带的头文件使用<>,不过""也能用 namespace pers{
using std::cout;
using std::cin;
void getPerson(Person &rp){
cout<<"Enter first name:";
cin>>rp.fname;
cout<<"Enter last name:";
cin>>rp.lname;
}
void showPerson(const Person &rp){
cout<<rp.lname<<","<<rp.fname;
}
} namespace debts{
void getDebt(Debt &rd){
getPerson(rd.name);
std::cout<<"Enter debt:";
std::cin>>rd.amount;
}
void showDebt(const Debt &rd){
showPerson(rd.name);
std::cout<<": $"<<rd.amount<<std::endl;
}
double sumDebts(const Debt ar[],int n){
double total=;
for (int i = ; i < n; i++)
total+=ar[i].amount;
return total;
}
}
main.cpp 主函数
#include<iostream>
#include "namesp.h"
using std::cout;
using std::endl; void other(){
using namespace debts;
Person dg={"Doodles","Glister"};
showPerson(dg);
cout<<endl;//因为showPerson没有换行
Debt zippy[];
int i;
for (i = ; i < ; i++)
getDebt(zippy[i]);
for (i = ; i < ; i++)
showDebt(zippy[i]);
cout<<"Total debt: $"<<sumDebts(zippy,)<<endl;
} void another(){
using pers::Person;
Person collector={"Milo","Rightshift"};
pers::showPerson(collector);
cout<<endl;
} void main(){
using debts::Debt;
using debts::showDebt;
Debt golf={{"Benny","Goatsniff"},120.0};
showDebt(golf);
other();
another();
system("pause");
}

[C++ Primer Plus] 第9章、内存模型和名称空间(一)程序清单的更多相关文章
- C++ primer plus读书笔记——第9章 内存模型和名称空间
第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C ...
- 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记
C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...
- 《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间
1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这 ...
- 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...
- [C++ Primer Plus] 第8章、函数探幽(一)程序清单——内联、引用、格式化输入输出、模板、decltype
程序清单8.1(inline内联函数) #include<iostream> using namespace std; inline double square(double x) {// ...
- [C++ Primer Plus] 第4章、复合类型(一)程序清单——指针new和delete
程序清单4.1 #include<iostream> using namespace std; void main(){ ]; yams[]=; yams[]=; yams[]=; ]={ ...
- (8)C++ 内存模型与名称空间
一.单独编译 头文件 不要将函数定义或者变量声明放到头文件中,引入多个文件时可能会造成同一个函数定义多次 引入头文件 #include "文件名" File1.h #ifndef ...
- [C++ Primer Plus] 第9章、内存模型和名称空间(二)课后习题
一.复习题 2.using声明和using编译指令的区别 using声明: using std::cin; using std::cout; using std::endl; using编译指令:us ...
- C++ Primer Plus读书笔记(九)内存模型和名称空间
1.作用域和链接 int num3; static int num4; int main() { } void func1() { static int num1; int num2; } 上边的代码 ...
随机推荐
- box-sizing (摘录)
//http://www.jianshu.com/p/e2eb0d8c9de6 box-sizing其它的值 content-box 描述:在宽度和高度之外绘制元素的内边距和边框. border-bo ...
- js 模拟超级大LE透中头奖 统计中头奖需要购买的彩票次数以及购买总金额
<!DOCTYPE html> <html> <head> <title>超级大LE透模拟</title> </head> &l ...
- 干货|爱奇艺CDN巡检系统技术解析
小结: 1. 中心处理系统 /1/将定制后的巡检任务拆分,通过配置与任务分发系统.CMDB*( configuration management database)将派发到边缘拨测系统/2/处理边缘拨 ...
- 系统重启后,mr程序不生成当前时间段的MRx文件问题
系统重启后,mr程序不生成当前时间段的MRx文件问题 2019-4-2 之前使用正常的MR程序,系统重启后无法生成MRE\MRO\MRS文件. 服务器有两个时钟:硬件时钟和系统时钟 硬件时钟从根本上讲 ...
- 创建一个vue项目()
1.打开cmd,选定路径 2. vue init webpack "项目名称“ 3.在项目路径下,安装一下项目依赖 cnpm install 4.运行 cnpm run dev 5.在浏 ...
- 把jmeter获取到的信息存到本地文件
1.jmeter使用正则表达式提取器,获取到响应信息,把获取到的响应信息写到本地文件 2.添加后置Bean Shell ,写入以下脚本 3.打开本地文件查看,写入成功 脚本内容如下: FileWrit ...
- springcloud第二步:发布服务提供者
创建项目service-member Maven依赖 <parent> <groupId>org.springframework.boot</groupId> &l ...
- 20175201课下作业 MyCP
要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十进 ...
- vi命令设置行号
1. :set nu :显示行号
- android模拟器访问PC本地接口
一般来讲PC本地接口是localhost:8080 而在安卓模拟器上用的话,他会映射模拟器本身的,也就是说,可以把模拟器也当成一个PC端来看待,这样会好理解点吧 而在模拟器上想要访问PC本地的loca ...
