C++入门(17):命名空间和模块化

亦凉 2022-08-19 13:17 202阅读 0赞

C++入门(17):命名空间和模块化

命名空间和模块化
系统级头文件作用:保证C++代码的可移植性;
头文件基本用途:提供必要的函数声明、 用户自定义数据类型(结构和类)、模板和全局性的常量。

C预处理器:以 # 开头,不允许以分号结尾。
预处理的条件指令:#if #else #elif #endif #ifdef #ifndef
比如:

  1. #ifndef MYCLASS_H //常量名通常与相应的文件名一致,但要把句点替换为下划线
  2. #define MYCLASS_H
  3. class MyClass{
  4. };
  5. #endif

C++中除了不允许对同一个结构做出多次声明外,通常可以对同一个东西声明很多次,但只能对它定义一次。
可以使用 #undef 指令反定义(删除)一个现有的常量定义:#undef ConstDef

创建命名空间
形式:namespace myNamespace{ //stuff } 注意:在最末尾右花括号的后面不需要加上分号。
1) 在预处理器指令的后面、类声明的前面,开始定义命名空间;
2) 类声明和类实现应该放在同一个命名空间里;
3) 只能在全局范围或另一个命名空间的内部定义一个命名空间(命名空间可以嵌套),不能在函数或类里定义命名空间;
4) 可以把任何东西放到命名空间里,而不仅仅是类;还可以用 namespace 关键字为现有的命名空间创建别名,比如,
namespace dog = reallyLongDogBasedNamespace;

使用命名空间
1) using namespace std; cout << "Hi";
2) using std::cout; cout << "Hi";
3) std::cout << "Hi"

存储类
每个变量都有一个存储类:
1) auto:默认存储类是 auto ,存储在栈中;
2) static:一个 static 变量可以有 external 或 internal 链接;
3) extern:全局变量,编译器不会为它分配内存,因为在其他地方应该有它的声明(为它分配过内存);
4) register:要求编译器把一个变量存储在CPU硬件里,它有着跟自动变量相同的作用域;特点是存取速度快。

链接
链接分三种,凡是有名字的东西必然属于其中之一:external、internal、none
一个编译好的对象即一个翻译单元。
1) 外链接是:每个翻译单元都可以访问这个东西;
2) 内链接是:在某个翻译单元里定义的东西只能在该翻译单元里使用(它有文件作用域)。在任何函数以外定义的静态变量都有内链接;
3) 在函数里定义的变量只存在于该函数的内部,没有任何链接。

函数可以用 static 关键字声明,这意味着它们只能在对它们做出定义的翻译单元里使用(它们有内链接);
静态函数和静态方法不一样:后者是在类里定义的静态函数,和类一样有着外链接;
静态变量只能存在于对它做出定义的函数内部;
默认情况下,变量有外链接,常量有内链接 。

C++入门(16):副本构造器和赋值操作符、强制类型转换

发表评论

表情:
评论列表 (有 0 条评论,202人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++命名空间

    本讲基本要求 \ 掌握:命名空间的作用及定义;如何使用命名空间。 \ 了解:使用早期的函数库 重点、难点 ◆命名空间的作用及定义;如何使用命名空间。 在学习本书

    相关 C++命名空间

    命名空间支持是C++的一项特性,加入你有A和B两个地方提供的函数但是名字都叫fun(),这样使用fun()的时候,编译器就不知道该用哪个了。命名空间能够让程序员把函数封装在一个

    相关 TypeScript 命名空间模块

    //命名空间namespace //创建一个命名空间,命名空间中存放的是类,是方便我们导入命名空间来调用类或者方法的 //命名空间的好处就是,让文件中的类名等不怕重复,

    相关 C++命名空间

    概述       在C语言中程序的全局变量作用域只有一个,所有的全局标识符都共享同一个作用域,在多人开发的时候,容易造成标识符冲突。C++为了解决这个问题提出了命名空间这

    相关 C++命名空间

    本讲基本要求      \ 掌握:命名空间的作用及定义;如何使用命名空间。      \ 了解:使用早期的函数库  重点、难点      ◆命名空间的作用及定义;