美文网首页
【C++温故知新】多文件架构与名称空间

【C++温故知新】多文件架构与名称空间

作者: 超级超级小天才 | 来源:发表于2019-08-18 11:30 被阅读0次

这是C++类重新复习学习笔记的第 五 篇,同专题的其他文章可以移步:https://www.jianshu.com/nb/39156122

头文件与源文件

一般我们将大量公用的代码段存放在头文件中,然后使用其他源文件引用这个头文件,从而使得很多代码段不需要在每个源文件中都书写一遍。一种推荐的策略是这样的,将整个项目/程序包分为三个部分:

  • 头文件(.h):包含结构体等数据类型的声明,类的框架、函数原型等等抽象而公用的部分
  • 源代码文件(.cpp):负责头文件中的抽象部分的具体化,如函数的主体、类的实现等
  • 源代码文件(.cpp):负责调用头文件中的函数以及实例化类模型等从而完成项目逻辑

头文件中不要包含函数的定义或者变量的声明,头文件中一般只包含如下的部分:

  • 函数原型
  • 使用 #define 或 const 定义的符号常量
  • 结构声明
  • 类声明
  • 模板声明
  • 内联函数

头文件通常的书写架构如下,例如我们创建了一个命名为 headFile.h 的头文件:

#ifndef HEADFILE_H_
#define HEADFILE_H_
 
// the head file
 
#endif

对头文件与源代码文件编译时是单独编译的,编译器会创建每个源代码文件的目标代码文件,生成 .o 后缀的文件,然后使用连接器将两个部分连接起来,将库代码和启动代码合并,生成一个 .out 后缀的文件,进而生成 .exe 后缀的可执行文件。

多文件编译的过程

名称空间

名称空间可以理解为为了区分不同的库类不同的厂商的代码中所包含的同命名的变量、函数等来问题的。例如我的程序包含了两个厂家开发的库,但这两个库中都有一个名为 List 的类,为了区分使用哪个厂家的类,就需要这两个厂家将自己的 List 类封装在自己的名称空间中,从而方便区分。

名称空间的创建

我们自己也可以创建名称空间,例如我们声明一个int类型的变量myInt,将其放在我们定义的一个名称空间MHZ中,可以这样写:

namespace MHZ
{
int myInt;
}

名称空间的使用

如果我想在我的程序中调用名称空间MHZ中的myInt变量,需要使用该名称空间,有以下的一些方式:

// 编译使用整个名称空间
// 这种方式最不安全
// 因为会将整个名称空间的内容全部编译使用
// 很容易出现不同名称空间重名的问题
using MHZ;
cout << myInt;
 
// 指定编译使用名称空间中的某个变量/函数等
// 这种方式相对安全
// 使用哪个因素就声明那个因素
using MHZ::myInt;
cout << myInt;
 
// 在调用的时候指明名称空间
// 这种方式虽然繁琐,但是最不容易出错
cout << MHZ::myInt;

转载请注明出处,本文永久更新链接:https://blogs.littlegenius.xin/2019/08/18/【C-温故知新】五内存模型与名称空间/

相关文章

  • 【C++温故知新】多文件架构与名称空间

    这是C++类重新复习学习笔记的第 五 篇,同专题的其他文章可以移步:https://www.jianshu.com...

  • Hadoop详解

    架构设计 NameNode NameNode: 文件系统的命名空间(面试题) 1.文件名称 2.文...

  • 1.C++基础

    C++头文件 传统C头文件C++头文件hpp文件 命名空间 C++ 引入了新的概念,命名空间可以有效避免大型项目的...

  • 开始C++

    进入C++ 1.当头文件不以 .h 结尾时,使用空间名称编译指令 using 来使 iostream 中的定义对程...

  • C++名称空间namespace

    我们常常会见到这样的语句: 或者还有这样的: 这些其实就是使用了C++的名称空间技术。 什么是名称空间呢?名称空间...

  • C++名称空间(namespace)

    前言 当随着C++项目项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如,两个...

  • HDFS的Federation特性

    背景 hdfs主要有两层架构: 命名空间(Namespace)由目录,文件和块组成。它支持所有与命名空间相关的文件...

  • Hadoop伪集群HDFS配置与MapReduce

    [TOC] 架构 1 NameNode 存储文件,名称,dataNode信息等等 2 DataNode 保存文件 ...

  • C++ 命名空间namespace

    本文转载自:C++ 命名空间namespace 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、...

  • 001-01 namespace命名空间

    1 namespace 命名空间 1.1 历史 头文件中 C++ 标准对 ".h" 与 不带".h" 的区别 是为...

网友评论

      本文标题:【C++温故知新】多文件架构与名称空间

      本文链接:https://www.haomeiwen.com/subject/cblrsctx.html