C++入门(17):命名空间和模块化
C++入门(17):命名空间和模块化
命名空间和模块化
系统级头文件作用:保证C++代码的可移植性;
头文件基本用途:提供必要的函数声明、 用户自定义数据类型(结构和类)、模板和全局性的常量。
C预处理器:以 # 开头,不允许以分号结尾。
预处理的条件指令:#if #else #elif #endif #ifdef #ifndef
比如:
#ifndef MYCLASS_H //常量名通常与相应的文件名一致,但要把句点替换为下划线
#define MYCLASS_H
class MyClass{
};
#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):副本构造器和赋值操作符、强制类型转换
还没有评论,来说两句吧...