龙空技术网

C++头文件和命名空间

腾科IT教育 472

前言:

此刻同学们对“c头文件cstdlib”可能比较关注,看官们都想要剖析一些“c头文件cstdlib”的相关资讯。那么小编也在网上收集了一些对于“c头文件cstdlib””的相关内容,希望朋友们能喜欢,你们一起来了解一下吧!

小伙伴们,今天小易又要开始讲C++啦,上次我们了解了输入与输出,这次我们来看一下输出程序的另一部分,头文件和命名空间啦。记住老规矩,开始新的程序编写时记得注释掉之前的代码哦!

好了,废话不多说先上干货。

1.C/C++各种头文件

注:"//"代表注释

#include <assert.h> //设定插入点

#include <ctype.h> //字符处理

#include <errno.h> //定义错误码

#include <float.h> //浮点数处理

#include <fstream.h> //文件输入/输出

#include <iomanip.h> //参数化输入/输出

#include <iostream.h> //数据流输入/输出

#include <limits.h> //定义各种数据类型最值常量

#include <locale.h> //定义本地化函数

#include <math.h> //定义数学函数

#include <stdio.h> //定义输入/输出函数

#include <stdlib.h> //定义杂项函数及内存分配函数#include <string.h> //字符串处理

#include <strstrea.h> //基于数组的输入/输出

#include <time.h> //定义关于时间的函数#include <wchar.h> //宽字符处理及输入/输出

#include <wctype.h> //宽字符分类//////////////////////////////////////////////////////////////////////////标准 C++ (同上的不再注释)

#include <algorithm> //STL 通用算法

#include <bitset> //STL 位集容器

#include <cctype>#include <cerrno>

#include <clocale>

#include <cmath>

#include <complex> //复数类#include <cstdio>#include <cstdlib>

#include <cstring>#include <ctime>

#include <deque> //STL 双端队列容器

#include <exception> //异常处理类

#include <fstream>

#include <functional> //STL 定义运算函数(代替运算符)

#include <limits>#include <list> //STL 线性列表容器#include <map> //STL 映射容器

#include <iomanip>#include <ios> //基本输入/输出支持#include <iosfwd> //输入/输出系统使用的前置声明

#include <iostream>

#include <istream> //基本输入流

#include <ostream> //基本输出流

#include <queue> //STL 队列容器

#include <set> //STL 集合容器#include <sstream> //基于字符串的流

#include <stack> //STL 堆栈容器

#include <stdexcept> //标准异常类

#include <streambuf> //底层输入/输出支持

#include <string> //字符串类

#include <utility> //STL 通用模板类

#include <vector> //STL 动态数组容器

#include <cwchar>

#include <cwctype>using namespace std;//////////////////////////////////////////////////////////////////////////C99 增加

#include <complex.h> //复数处理

#include <fenv.h> //浮点环境

#include <inttypes.h> //整数格式转换

#include <stdbool.h> //布尔环境

#include <stdint.h> //整型环境

#include <tgmath.h> //通用类型数学宏

2.命名空间

一个命名空间的定义包含两部分:首先是关键字namespace,随后是命名空间的名字。在命名空间名字后面是一系列由花括号括起来的声明和定义。只要能出现在全局作用域中的声明就能置于命名空间内,主要包括:类、变量(及其初始化操作)、函数(及其定义)、模板和其它命名空间。命名空间结束后无须分号,这一点与块类似。和其它名字一样,命名空间的名字也必须在定义它的作用域内保持唯一。命名空间既可以定义在全局作用域内,也可以定义在其它命名空间中,但是不能定义在函数或类的内部。命名空间作用域后面无须分号。

命名空间相当于一个容器,它里面包含了逻辑结构上互相关联的一组类、模板、函数等。也就是说如果某些“对象”在逻辑上有关系,我们就可以将它们放到一个命名空间里用以和外界进行区分。命名空间一个显著的特点是命名空间内的变量(类等)名可以和命名空间以外的重名。这可以用来将不同人写的代码进行整合。

class A //声明A类

{

public:

void funl();//声明A类中的funl函数

private:

int i;

};

void A::funl() //定义A类中的funl函数

{…………}

class B //声明B类{

public:

void funl(); //B类中也有funl函数

void fun2();

};

void B::funl() //定义B类中的funl函数

{ …………}

在文件中定义了两个类,在这两个类中可以有同名的函数。在引用时,为了区别,应该加上类名作为限定:这样不会发生混淆。

在文件中可以定义全局变量(global variable),它的作用域是整个程序。如果在文件A中定义了一个变量a:

int a=3;

在文件B中可以再定义一个变量a:

int a=5;

在分别对文件A和文件B进行编译时不会有问题。但是,如果一个程序包括文件A和文件B,那么在进行连接时,会报告出错,因为在同一个程序中有两个同名的变量,认为是对变量的重复定义。

可以通过extern声明同一程序中的两个文件中的同名变量是同一个变量。如果在文件B中有以下声明:

extem int a;

表示文件B中的变量a是在其他文件中已定义的变量。由于有此声明,在程序编译和连接后,文件A的变量a的作用域扩展到了文件B。如果在文件B中不再对a赋值,则在文件B中用以下语句输出的是文件A中变量a的值:

cout<<a; //得到a的值为3

3.命名冲突

首先,若程序员A在头文件headerl.h中定义了类Student和函数fun。

#include <string>#include <cmath>using namespace std;class Student //声明Student类{ public: Student(int n,string nam,int a) {  num=n; name=nam; age=a; }  void get_data();private:  int num;  string name;  int age; };void Student::get_data() //成员函数定义{  cout cout<<num<<" "<<name<<" "<<age<<endl; }double fun(double a,double b)//定义全局函数(即外部函数){   return sqrt(a+b);}//在main函数所在的文件中包含头文件headerl.h:#include <iostream>using namespace std; #include "header1.h" //注意要用双引号,因为文件一般是放在用用户目录中的int main(){ Student stud1(101,"Wang",18); //定义类对象studl  stud1.get_data();  cout<<fun(5,3)<<endl;  return 0; }---------------------------------------------------程序能正常运行,输出为 101 Wang 182.82843

如果程序员乙写了头文件header2.h,在其中除了定义其他类以外,还定义了类Student和函数fun,但其内容与头文件headerl.h中的Student和函数fun有所不同

#include <string>#include <cmath>using namespace std;class Student //声明Student类{public: Student( Student(int n,string nam,char s) //参数与headerl中的student不同 {  num=n; name=nam; sex=s; }  void get_data();private:  int num;  string name;  char sex; };};//此项与headerl不同void Student::get_data() //成员函数定义{  cout<<num<<" "<<name<<" "<<sex<<endl; }double fun(double a,double b) //定义全局函数 {   return sqrt(a-b);} //返回值与headerl中的fun函数不同//头文件2中可能还有其他内容

标签: #c头文件cstdlib