自发购卡网站在吗做,网站改版的影响,网站打不开,wordpress phpdisk欢迎大家来到海盗猫鸥的博客——
断更许久#xff0c;让我们继续好好学习吧#xff01; 目录
1.namespace命名空间
命名空间的存在价值#xff1a;
命名空间的定义#xff1a;
命名空间的使用#xff1a;
2.C输入输出函数
使用#xff1a;
3.缺省参数
4.函数重载…欢迎大家来到海盗猫鸥的博客——
断更许久让我们继续好好学习吧 目录
1.namespace命名空间
命名空间的存在价值
命名空间的定义
命名空间的使用
2.C输入输出函数
使用
3.缺省参数
4.函数重载
结语 1.namespace命名空间
命名空间的存在价值
在C/C中变量、函数和后⾯要学到的类都是⼤量存在的这些变量、函数和类的名称将都存在于全 局作⽤域中可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化以避免命名 冲突或名字污染namespace关键字的出现就是针对这种问题的
简而言之当同一个项目中存在多个名字相同的变量时可以防止命名冲突或者名字污染也可以便于区分。在大型项目的开发中可以说必不可少。
命名空间的定义 namespace就是命名空间的关键字在关键字后加上命名空间的名字在加上{}来限定范围即可。 namespace hdmo
{int a 1;
} 注意命名空间最后的 } 后面不用加上 ; 区别于结构体和函数类似。 命名空间本质就是我们创建了一个域区别全局作用域而独立就像每一个函数都有一个作用域一样每个函数里的参数作用域都在函数范围内。命名空间也同理每个命名空间中的函数、变量等的作用域都在命名空间的限定范围内需要通过调用命名空间才能使用但需要注意的是命名空间中的函数变量等生命周期都是全局的 namespace只能在全局作用域下定于也可以嵌套定义。 在同一个项目中相同名字的命名空间会被认为是同一个命名空间。 namespace hdmo
{int a 1;
}namespace hdmo
{int b 1;
} 此时两个hdmo表示的就是同一个命名空间 而C的标准库就存放在了名叫stdstandard的命名空间中以此防止和其他语言的函数冲突这也是为什么C的程序中为什么基本都包含了一个
using namespace std;
就是为了包含C的标准库。
命名空间的使用
由于命名空间是一个域想要在外部使用其中的函数变量等内容时就需要像结构体一样使用一个操作符来实现这个操作。 命名空间的调用操作符即为两个冒号 :: #include stdio.hnamespace hdmo
{int a 1;
}
int a 2;
int main()
{printf(%d\n, a);printf(%d\n, ::a);printf(%d\n, hdmo::a);return 0;
} 从输出结果我们可以知道当::前面为空时默认调用全局作用域的变量。 命名空间中的变量函数等在使用时有三种方式 1.单个访问使用 :: 来单独访问一个命名空间中的变量或者函数最安全的使用方式 2.单个展开使用using单独展开一个变量或者函数展开后其作用域就变为了全局作用域不再受限于命名空间。推荐常用的在不冲突的条件下使用这种方式。 3.全展开直接将指定的命名空间全部展开在项目中不推荐使用冲突风险较大可以在小型的程序中使用C标准库的标准库就是全展开的所以我们在使用cin和cout时不需要在前面加上std::) 2.C输入输出函数
在C语言中我们的输入输出语句分别为scanf和printfC也兼容C语言的输入输出语句但也有自己的输入输出函数即cin和cout。
要想使用cin和cout函数就要包含iostream标准输入输出流库并且要包含C的标准函数库
#include iostream
using namespace std;
使用
cin在使用时用 来输入
cout在使用时用’ ‘来输出。
是流插⼊运算符是流提取运算符和在C语言中还表示左移和右移运算符
#include iostream
using namespace std;
int main()
{int a 0;cin a;cout a endl;printf(%d\n, a);return 0;
}
endl我们可以先简单理解为换行\n基础部分不做过多讲解以后的学习中会补充。
上述代码我们可以看出cin和cout没有像scanf和printf一样使用%d%c等来控制变量的输入输出格式这是因为cin和cout可以自动识别变量和数据的类型这是相对方便的地方。
在VS2022环境中上述代码中不包含stdio.h也能使用scanf和prinf函数这是因为在VS中iostream间接包含了stdio.h所以可以直接使用但在其他编译环境下可能就需要包含stdio.h。
在想要实现控制精度等操作时推荐直接使用C语言的输入输出方法来实现C中想要实现这个操作反而会更麻烦。
需要注意的是scanf和printf的速度相对于cin和cout是更快的在竞赛中卡运行时长的题目中可以直接使用scanf和printf而下面代码可以提高cin和cout的效率但本篇先不做解释。
#include iostream
using namespace std;
int main()
{// 在io需求⽐较⾼的地⽅如部分⼤量输⼊的竞赛题中加上以下3⾏代码// 可以提⾼CIO效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;
}
3.缺省参数
缺省参数就是在声明或者定义函数的时候给函数参数一个缺省值当我们调用函数时若缺省参数没有传值就使用定义好的缺省值若传值就使用传递的值。
缺省参数分为全缺省和半缺省全缺省就是全部形参都给缺省值半缺省就是部分形参给缺省值。且C规定半缺省参数必须从右往左 依次连续缺省不能间隔跳跃给缺省值。
#include iostream
using namespace std;
namespace hdmo
{//全缺省int Fun1(int x 0, int y 0){return x y;}//半缺省int Fun2(int x, int y 0){return x y;}
}int main()
{cout hdmo::Fun1() endl;//全缺省可以不传参cout hdmo::Fun1(1) endl;cout hdmo::Fun1(1,1) endl;/*cout hdmo::Fun2() endl;//半缺省不能不传参*/cout hdmo::Fun2(2) endl;cout hdmo::Fun2(2,2) endl;return 0;
}
上述代码结果为
半缺省必须保证缺省参数从最右往左定义和定义连续性普通参数在左缺省参数在右。
4.函数重载
函数重载即为同时存在多个函数名相同的函数同一个函数名同时表示个多个函数即为重载。
他们之间的区别由参数类型和数量来决定和返回值类型无关仅返回值类型不同的两个同名函数无法实现重载。 #include iostream
using namespace std;
namespace hdmo
{int Add(int x, int y){return x y;}double Add(double x, int y){return x y;}double Add(int x, double y){return x y;}double Add(double x, double y){return x y;}
}
int main()
{using hdmo::Add;cout Add(1, 1) endl;cout Add(1.1, 1) endl;cout Add(1, 1.1) endl;cout Add(1.1, 1.1) endl;return 0;
}
结果为
通过上述代码我们就可以看出重载的使用可以使我们更加方便的使用函数。若在C语言中要实现上述效果就要使用四个不同的函数名定义四个函数使用时区分使用而C中有了重载之后我们就可以将所有的加法函数都统一为一个名字使用时也不用区分直接使用即可非常方便。
结语
本篇C入门基础篇就先讲到这里后序会继续讲解其他的入门基础知识欢迎大家继续莅临指教。
有不足的地方大家可以私信或者评论区指出
个人主页海盗猫鸥-CSDN博客
这里是小鸥我们下期见~(*¯︶¯*)~