山东网络建站推广,做网站背景图片怎么放,做动态的网站的参考资料有哪些,WordPress 蜘蛛检测前言C语言是结构化和模块化的语言#xff0c;适合处理较小规模的程序。对于复杂的问题#xff0c;规模较大的程序#xff0c;需要高度的抽象和建模时#xff0c;C语言则不合适。为了解决软件危机#xff0c; 20世纪80年代#xff0c; 计算机界提出了OOP(object oriented …前言C语言是结构化和模块化的语言适合处理较小规模的程序。对于复杂的问题规模较大的程序需要高度的抽象和建模时C语言则不合适。为了解决软件危机 20世纪80年代 计算机界提出了OOP(object oriented programming面向对象)思想支持面向对象的程序设计语言应运而生。 1982年Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念发明了一种新的程序语言。为了表达该语言与C语言的渊源关系命名为C。因此C是基于C语言而产生的它既可以进行C语言的过程化程序设计又可以进行以抽象数据类型为特点的基于对象的程序设计还可以进行面向对象的程序设计。从今天开始我们进入C的学习C从四十年前诞生以来也是不断的发展着成为最广泛的编程语言之一。命名空间示例在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。我们在许多的C程序中都会看到以下的代码但是有人仔细研究过这是什么意思吗#includeiostream
// std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中
using namespace std;原来这里的namespace就是命名空间的意思std就是C的标准库C标准库中所有的定义和实现都放在std这个命名空间里那么命名空间到底是什么意思呢#include stdio.h
#include stdlib.h
int rand 10;
// C语言没办法解决类似这样的命名冲突问题所以C提出了namespace来解决
int main()
{printf(%d\n, rand);
return 0;
}
// 编译后后报错error C2365: “rand”: 重定义以前的定义是“函数”我们来探究一下来看这段代码我们定义了一个rand变量但是在C语言的库中在stdlib.h中有一个rand函数造成了命名冲突但是在C中提出了命名空间来解决这个问题。命名空间定义定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。命名空间定义时有有三个特点1.命名空间的名字可以为任何的变量名命名空间中可以定义变量函数类型。// 1. 正常的命名空间定义
namespace tmt
{// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
}2.命名空间可以嵌套使用在N1内部也可以嵌套N2的命名空间。//2. 命名空间可以嵌套
// test.cpp
namespace N1
{int a;int b;int Add(int left, int right){return left right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}3.当在一个工程中有名称相同的命名空间会将这些命名空间中的内容合并。//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h
namespace N1
{int Mul(int left, int right){return left * right;}
}命名空间使用我们学会了命名空间的定义之后我们来探究一下命名空间是如何使用的吧namespace tmt
{int a 1;
}int main()
{printf(%d, a);return 0;
}我们发现编译器并不认识这个a变量这时因为a定义在tmt这个命名空间内部有了自己的作用域当我们要使用这个变量时先得来操作这个命名空间。下边我来介绍三种方式使用作用域限定符来操作int main()
{printf(%d\n, tmt::a);return 0;
}2.使用using将命名空间中某个成员引入using tmt::a;
int main()
{printf(%d\n, a);return 0;
}3.使用using将命名空间名称引入using namespce tmt;
int main()
{printf(%d\n,a);return 0;
}注意事项虽然有三种方式来使用命名空间内的内容但是在实际的工程中我们不会选择第三种方式因为设计命名空间的初衷就是要避免函数名相同造成冲突但是当我们将整个命名空间引入时就丧失了隔离的效果所以在写工程时尽量不去使用第三种方式。在平时的练习中我们就可以使用三种方式使用第三种方式比较方便。C输入输出我们前边学习了C语言C语言的输入输出必须引入库stdio输出使用的是printf函数叫做标准输出函数而标准输入函数就是scanf函数。我们下来看一下C是如何输入输出的#includeiostream
// std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{coutHello world!!!endl;return 0;
}C的标准输入输出要引用iostream流这里就用到了前文介绍的命名空间只有这样才能使用C标准库中的函数。注意1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件以及按命名空间使用方法使用std。2. cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包iostream头文件中。3. 是流插入运算符是流提取运算符。4. 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。C的输入输出可以自动识别变量类型。#include iostream
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cina;cinbc;coutaendl;coutb cendl;return 0;
}C语言中使用printf和scanf函数必须指定函数类型但是使用C的cout与cin不用指定函数类型直接输入变量就好了。// ps关于cout和cin还有很多更复杂的用法比如控制浮点数输出精度控制整形输出进制格式等等。因为C兼容C语言的用法这些又用得不是很多我们这里就不展开学习了。后续如果有需要我们再配合文档学习。