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

程序清单9.11-13(名称空间示例)

namesp.h  头文件:常量、结构定义、函数原型

 1 //namesp.h
 2 #include<string>
 3 //creat the pers and debts namespace
 4 namespace pers                      //包含Person结构的定义和两个函数原型
 5 {
 6     struct Person
 7     {
 8         std::string fname;
 9         std::string lname;
10     };
11     void getPerson(Person &);
12     void showPerson(const Person &);
13 }
14
15 namespace debts                    //定义Debt结构,用于存储人名和金额,使用using编译指令,让pers中的名称在debts空间也能使用
16 {
17     using namespace pers;
18     struct Debt
19     {
20         Person name;              //name是Person的结构变量
21         double amount;
22     };
23     void getDebt(Debt &);
24     void showDebt(const Debt &);
25     double sumDebts(const Debt ar[], int n);
26 }

namesp.cpp  源代码文件:头文件中的函数原型对应的定义

 1 //namesp.cpp---namespaces
 2 #include <iostream>
 3 #include"namesp.h"         //自己编写的头文件只能使用引号"",系统自带的头文件使用<>,不过""也能用
 4
 5 namespace pers
 6 {
 7     using std::cout;
 8     using std::cin;
 9     void getPerson(Person &rp)
10     {
11         cout << "Enter first name: ";
12         cin >> rp.fname;
13         cout << "Enter last name: ";
14         cin >> rp.lname;
15     }
16     void showPerson(const Person &rp)
17     {
18         std::cout << rp.lname << ", " << rp.fname;
19     }
20 }
21
22 namespace debts
23 {
24     void getDebt(Debt &rd)
25     {
26         getPerson(rd.name);
27         std::cout << "Enter debt: ";
28         std::cin >> rd.amount;
29     }
30     void showDebt(const Debt &rd)
31     {
32         showPerson(rd.name);
33         std::cout << ": $ " << rd.amount << std::endl;
34     }
35     double sumDebts(const Debt ar[], int n)
36     {
37         double total = 0;
38         for (int i = 0; i < n; i++)
39         {
40             total += ar[i].amount;
41         }
42         return total;
43     }
44 }

namespp.cpp  源代码文件(主函数):main()和其他函数原型及定义

 1 //using namespaces
 2 #include<iostream>
 3 #include"namesp.h"
 4 void other(void);
 5 void another(void);
 6
 7 int main(void)
 8 {
 9     using debts::Debt;
10     using debts::showDebt;               //注意:using声明只使用了名称,没有描述showDebt的返回类型或函数特征标,而只给出了名称;因此,如果函数被重载,则一个using声明将导入所有的版本
11     Debt golf = { {"Benny","Goatsniff"},120.0 };
12     showDebt(golf);
13     other();
14     another();
15     system("pause");
16     return 0;
17 }
18
19 void other(void)
20 {
21     using std::cout;
22     using std::endl;
23     using namespace debts;
24     Person dg = { "Doo","Glis" };
25     showPerson(dg);
26     cout << endl;
27     Debt zippy[3];
28     int i;
29     for (i = 0; i < 3; i++)
30         getDebt(zippy[i]);
31     for (i = 0; i < 3; i++)
32         showDebt(zippy[i]);
33     cout << "Total debt: $ " << sumDebts(zippy, 3) << endl;
34     return;
35 }
36
37 void another()
38 {
39     using pers::Person;
40     Person collector = { "Milo","Rightshift" };
41     pers::showPerson(collector);
42     std::cout << std::endl;
43 }

原文地址:https://www.cnblogs.com/Fionaaa/p/12686485.html

时间: 2024-10-11 21:53:18

[C++ Primer Plus] 第9章、内存模型和名称空间——(一)程序清单的相关文章

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

第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C++编译器将在存储标准头文件的主机系统的文件系统中查找.但如果头文件名包含在双引号中,则编译器将首先查找当前的工作目录或源代码目录(或其他目录,这取决于编译器).如果没有在那里找到头文件,则将在标准位置中查找.因此在包含自己的头文件时,应使用引号而不是尖括号. 3. 链接程序将目标文件代码.库代码和

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

C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用户定义的类型及其使用方式.最后,将main()和其他使用这些函数的函数放在第三个文件中.C++的存储方案决定了变量保留在内存中的事件(存储持续性)以及程序的哪一部分可以访问它(作用域和链接性).自动变量在代码块(如函数体或函数体中的代码块)中定义的变量,仅当程序执行到包含定义的代码块时,它们才存在,

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

1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这是因为用#include管理头文件. 1.3 避免多次包含同一个头文件 1 #ifndef COORDIN_H_ 2 #define COORDIN_H_ 3 // place include file contents here 4 #endif 2. 存储持续性.作用域和链接性 1. 存储方案:

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

第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免多次包含同一个头文件的技术:#ifndef/#endif.仅当以前没有使用预处理器编译指令#define定义一个头文件名称时,才处理#ifndef和#endif之间的语句. 4.链接性描述了名称如何在不同单元间共享.链接性为外部的名称可在文件间共享,链接性为内部的名称只能由一个文件中的函数共享.自动

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

头文件 golf.h 1 //golf.h --for pe9-1.cpp 2 3 const int Len = 40; 4 struct golf 5 { 6 char fullname[Len]; 7 int handicap; 8 }; 9 10 void setgolf(golf &g, const char *name, int hc); 11 12 int setgolf(golf &g); 13 14 void handicap(golf &g, int hc);

第九章:内存模型与名称空间

9.1题:构造函数的调用 #include<iostream> #include<cstring> using namespace std; class Golf { string m_name; int m_handicap; public: Golf():m_name("Sam"),m_handicap(24){};//析构函数的赋值,m_name和m_handicap在进入大括号之前就已经初始化 void show() { cout << m_

《深入理解Java虚拟机》笔记 第十二章 内存模型

主内存与工作内存 ? Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量值这样的底层细节. ? ? 此处的变量(Variable)与Java编译中所说的变量略有区别,它包括了实例字段,静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不存在竞争的问题. ? ? 为了获得比较好的执行效率,Java内存模型并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器调整代

[C++ Primer Plus] 7、分支语句和逻辑运算符(一)程序清单

程序清单6.2 #include<iostream> using namespace std; void main() { char ch; cout << "Type, and I shall repeat.\n"; cin.get(ch); while(ch != '.') { if (ch == '\n') cout << ch; else cout << ++ch; cin.get(ch); } system("paus

第12章 Java内存模型与线程

1. Java内存模型 Java虚拟机规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致性的并发效果.在此之前,主流程序语言直接使用物理硬件(或者说是操作系统的内存模型),因此会由于不同平台上内存模型的差异,导致程序在一套平台上并发完全正常,而在另一套平台上并发访问却经常出错. 1. 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的