当前位置: 首页 > news >正文

做网站加模块网站建设江西

做网站加模块,网站建设江西,大兴网站开发公司,免费登记照制作app一、命名空间 1、namespace的意义 在C/C中#xff0c;变量、函数和后面要学到的类都是大量存在的#xff0c;这些变量、函数和类的名称将都存在于全 局作用域中#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化#xff0c;以避免命名 冲突…一、命名空间 1、namespace的意义 在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全 局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名 冲突或名字污染namespac关键字的出现就是针对这种问题的。 c语言项目类似下面程序这样的命名冲突是普遍存在的问题C引入namespac就是为了更好的解决 这样的问题因为我们设置的变量rand和stdlib.h中的rand函数冲突所以报错 #include stdio.h #include stdlib.h int rand 10; int main() {// 编译报错error C2365: “rand”: 重定义以前的定义是“函数”printf(%d\n, rand);return 0; }2、namespace的定义 1、定义命名空间需要使用法到namespace关键字后面跟命名空间的名字然后接⼀对{}即可{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。注意{}后不跟“”。 2、namespace本质是定义出⼀个域这个域跟全局域各自独立不同的域可以定义同名变量所以下 面的rand不在冲突了。 #includeiostream #include stdio.h #include stdlib.h namespace tmp {int rand 0; } int main() {printf(%d\n, rand);return 0; }3、C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑所有有了域隔离名字冲突就解决了。局部域和全局域除了会影响 编译查找逻辑还会影响变量的声明周期命名空间域和类域不影响变量声明周期。 4、namespace只能定义在全局当然他还可以嵌套定义。 #includeiostream #include stdio.h #include stdlib.h namespace tmp {int rand 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};}} int main() {printf(%d\n, rand);return 0; }5、项目工程中多文件中定义的同名namespace会认为是⼀个namespace不会冲突。 test.c文件 #includeiostream #include stdio.h #include stdlib.h #includetest.h namespace tmp {int rand 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};}} int main() {printf(%d\n, tmp::d);return 0; }test.h文件 #pragma once namespace tmp {int d 0; }可以发现在.c文件中可以使用tmp空间中的d变量 。 6、C标准库都放在⼀个叫std(standard)的命名空间中。 7、如果想使用全局域中的变量我们可以这么操作 int a 3; int main() {int a 0;printf(%d\n, ::a);return 0; }这样printf先打印的是3。 3、命名空间的使用 编译查找⼀个变量的声明/定义时默认只会在局部或者全局查找不会到命名空间里面去查找。所以 下面程序会编译报错。 namespace tmp {int d 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};} } int main() {int a 0;printf(%d\n, d);//未定义标识符dreturn 0; }所以我们要使用命名空间中定义的变量/函数有三种方式 1、指定命名空间访问项目中推荐这种方式。 tmp::d2、using将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式。 namespace tmp {int d 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};} } using tmp::d; int main() {int a 0;printf(%d\n, d);//未定义标识符dreturn 0; }3、展开命名空间中全部成员项目不推荐冲突风险很大日常小练习程序为了方便推荐使用。 namespace tmp {int d 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};} } using namespace tmp; int main() {int a 0;printf(%d\n, d);//未定义标识符dreturn 0; }二、输入和输出 1、 是 Input Output Stream 的缩写是标准的输入、输出流库定义了标准的输入、输 出对象。 2、std::cin 是 istream 类的对象它主要面向窄字符narrow characters (of type char)的标准输 入流。 3、std::cout 是 ostream 类的对象它主要面向窄字符的标准输出流。 4、std::endl 是⼀个函数流插入输出时相当于插入⼀个换行字符加刷新缓冲区。 5、是流插入运算符是流提取运算符。C语言还用这两个运算符做位运算左移/右移 6、使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动指定格式C**的输入** 输出可以自动识别变量类型(本质是通过函数重载实现的)其实最重要的是C的流能更好的支持自定义 类型对象输入和输出。 #includeiostream #include stdio.h #include stdlib.h namespace tmp {int a 0;double b 0.0;char c 0;namespace tmp1{int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};} } using namespace tmp; using namespace std; int main() {cin a b c;cout a b c;return 0; }7、cout/cin/endl等都属于C标准库C标准库都放在⼀个叫std(standard)的命名空间中所以要 通过命名空间的使用方式去用他们。 8、⼀般日常练习中我们可以using namespace std实际项目开发中不建议using namespace std。 三、 缺省参数 1、缺省参数的定义以及规定 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时如果没有指定实参 则采用该形参的缺省值否则使用指定的实参缺省参数分为全缺省和半缺省参数。有些地方把 缺省参数也叫默认参数。 全缺省就是全部形参给缺省值半缺省就是部分形参给缺省值。C规定半缺省参数必须从右往左 依次连续缺省不能间隔跳跃给缺省值。 带缺省参数的函数调用C规定必须从左到右依次给实参不能跳跃给实参。 函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省 值。 #include iostream using namespace std; void Func(int a 0) {cout a endl; } int main() {Func(); // 没有传参时使⽤参数的默认值Func(10); // 传参时使⽤指定的实参return 0; }2、全缺省和半缺省 #include iostream using namespace std; // 全缺省 void Func1(int a 10, int b 20, int c 30) {cout a a endl;cout b b endl;cout c c endl endl; } // 半缺省 void Func2(int a, int b 10, int c 20) {cout a a endl;cout b b endl;cout c c endl endl; } int main() {Func1();Func1(1);Func1(1, 2);Func1(1, 2, 3);Func2(100);Func2(100, 200);Func2(100, 200, 300);return 0; }半缺省不能这么写 void Func2(int a 10, int b, int c 20) {cout a a endl;cout b b endl;cout c c endl endl; } //或者 void Func2(int a 10, int b, int c) {cout a a endl;cout b b endl;cout c c endl endl; }必须严格遵守 半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。 3、缺省参数的实际应用 我们在没有学c之前我们实现栈的初始化以及插人时我们是这么写的 typedef int STDataType; typedef struct Stack {STDataType* a;int top;int capacity; }ST; // 栈顶 void STInit(ST* ps, int n) {assert(ps);ps-a (STDataType*)malloc(n * sizeof(STDataType));ps-top 0;ps-capacity n; } void STPush(ST* ps, STDataType x) {assert(ps);// 满了 扩容if (ps-top ps-capacity){printf(扩容\n);int newcapacity ps-capacity 0 ? 4 : ps-capacity* 2;STDataType* tmp (STDataType*)realloc(ps-a,newcapacity * sizeof(STDataType));if (tmp NULL){perror(realloc fail);return;}ps-a tmp;ps-capacity newcapacity;}ps-a[ps-top] x;ps-top; }如果我们要插入100个数据则就需要不断的扩容有效率的损耗但是我们在学习了缺省参数后我们可以这么写 // 栈顶 void STInit(ST* ps, int n 4) {assert(ps);ps-a (STDataType*)malloc(n * sizeof(STDataType));ps-top 0;ps-capacity n; } void STPush(ST* ps, STDataType x) {assert(ps);// 满了 扩容if (ps-top ps-capacity){printf(扩容\n);int newcapacity ps-capacity 0 ? 4 : ps-capacity* 2;STDataType* tmp (STDataType*)realloc(ps-a,newcapacity * sizeof(STDataType));if (tmp NULL){perror(realloc fail);return;}ps-a tmp;ps-capacity newcapacity;}ps-a[ps-top] x;ps-top; } int main() {ST a;STInit(a, 100);//这里不传100也可以因为规定必须从左到右依次给实参不能跳跃给实参。刚好和缺省参数确定位置互补for (int i 0; i 100; i){STPush(a, i);}return 0; }这样就有效避免了重复开辟空间的问题。 四、函数重载 C支持持在同⼀作用域中出现同名函数但是要求这些同名函数的形参不同可以是参数个数不同或者 类型不同。这样C函数调用就表现出了多态行为使用更灵活。但是返回值不同不能作为重载条件 因为调用时也无法区分如果返回值和参数类型或者个数同时变化则也为重载条件。 1、参数类型不同 #includeiostream using namespace std; // 1、参数类型不同 int Add(int left, int right) {cout int Add(int left, int right) endl;return left right; } double Add(double left, double right) {cout double Add(double left, double right) endl;return left right; }2、参数个数不同 // 2、参数个数不同 void f() {cout f() endl; } void f(int a) {cout f(int a) endl; }特别的如果上面的用缺省参数那么在不传参数调用时就会报错编译器不知道调用谁 // 下⾯两个函数构成重载 // f()但是调⽤时会报错存在歧义编译器不知道调⽤谁 void f1() {cout f() endl; } void f1(int a 10) {cout f(int a) endl; }3、参数顺序不同实际上就是参数类型不同 // 3、参数类型顺序不同 void f(int a, char b) {cout f(int a,char b) endl; } void f(char b, int a) {cout f(char b, int a) endl; }#includeiostream using namespace std; // 1、参数类型不同 int Add(int left, int right) {cout int Add(int left, int right) endl;return left right; } double Add(double left, double right) {cout double Add(double left, double right) endl;return left right; } // 2、参数个数不同 void f() {cout f() endl; } void f(int a) {cout f(int a) endl; } void f(int a, char b) {cout f(int a,char b) endl; } void f(char b, int a) {cout f(char b, int a) endl; } int main() {Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, a);f(a, 10);return 0; } #includeiostream using namespace std; // 1、参数类型不同 int Add(int left, int right) {cout int Add(int left, int right) endl;return left right; } double Add(double left, double right) {cout double Add(double left, double right) endl;return left right; } // 2、参数个数不同 void f() {cout f() endl; } void f(int a) {cout f(int a) endl; } void f(int a, char b) {cout f(int a,char b) endl; } void f(char b, int a) {cout f(char b, int a) endl; } int main() {Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, a);f(a, 10);return 0; } 结果
http://www.hkea.cn/news/14464303/

相关文章:

  • 做网站 知乎怎么创建网站平台赚钱
  • 陕西省建设监理协会证书查询网站拼团购物网站开发
  • 帮站seo湖南湘潭
  • 深圳html5网站开发建立网站需要多久
  • 项目网站建设应入哪个科目营销型网站策划公司
  • 镇江网站排名优化价格直播网站开发平台
  • 华为云速建站可以做英文网站网站制作有限公司
  • 安康网站建设技巧网页制作专业公司
  • 如何运营网站网络营销乐云seo
  • 建筑类招聘网站有哪些品牌设计包括哪些
  • 常见的简单的网站制作wordpress页面中添加小工具栏
  • 电子商务网站设计原理书籍注册域名之后怎么使用
  • 昆明网站建设网站wordpress无法设置语言包
  • 福州百度企业网站seo电脑网站开发手机上可以打开吗
  • 现在个人做网站还能盈利吗帝国做的网站根目录
  • 无锡做网站公司电话网络营销主要传播渠道
  • 江西南昌网站建设服务wordpress 导航菜单 居中
  • 手机网站有什么要求Discuz采集到Wordpress
  • 做暖dnf动态ufo网站园林景观设计公司点评的网站和论坛
  • 网站建设的关键免费网站或软件
  • 带后台的html网站源码网络推广公司方案
  • 江阴做网站的企业dw怎么做秋季运动会网站
  • 深圳好的网站建设公司排名青岛企业网站建设公司
  • 学校建设服务网网站建设方案项目书贵阳市观山湖区网站建设
  • 怎么 给自己的网站做优化呢钦州做网站
  • 企业高端网站制作站长统计幸福宝网站统计
  • wap网站模板下载公众号注册
  • 张家港网站哪家做的好互联网品牌宣传推广服务公司
  • 网站后台编码注册城乡规划师协会
  • 优定软件网站建设关于网站建设的论文提纲