深圳百度网站建设,网站关键词没排名怎么办,怎样用电脑做网站,网站建设制作需要多少钱#x1f525;个人主页#xff1a;guoguoqiang #x1f525;专栏#xff1a;我与C的爱恋 本篇内容带大家浅浅的了解一下C中的命名空间。 在c中#xff0c;名称#xff08;name#xff09;可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大#xff0c;名称… 个人主页guoguoqiang 专栏我与C的爱恋 本篇内容带大家浅浅的了解一下C中的命名空间。 在c中名称name可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大名称互相冲突性的可能性越大。另外使用多个厂商的类库时也可能导致名称冲突。为了避免在大规模程序的设计中以及在程序员使用各种各样的C库时这些标识符的命名发生冲突标准C引入关键字namespace命名空间/名字空间/名称空间可以更好地控制标识符的作用域。 一、命名空间
举例
#include stdio.h
#include stdlib.h
int rand 10;
// C语言没办法解决类似这样的命名冲突问题所以C提出了namespace来解决
int main()
{
printf(%d\n, rand);
return 0;
}
// 编译后后报错error C2365: “rand”: 重定义以前的定义是“函数”而为什么会出现这样的情况呢是因为在C语言中的stdlib.h中的rand函数和我们定义的变量冲突了这种情况在C语言中我们只能通过改变参数的名字来解决这种情况但是在C完全不用担心这种情况因为C中有着命名空间namespace来严格管控函数。 什么是命名空间呢 命名空间就是通过定义一个空间来封装变量函数是一种用来给变量和函数等标识符起一个独特且有组织的名称的机制。通过使用命名空间可以避免在不同的代码模块中出现重名的标识符从而提高代码的可读性和可维护性。
1 命名空间的定义
定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{} 中即为命名空间的成员。
// 1. 正常的命名空间定义
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int rand 10;
int Add(int left, int right)
{
return left right;
}
注意一个命名空间就定义了一个新的作用域命名空间中的所有内容都局限于该命名空间中
2.2 命名空间使用
命名空间中成员该如何使用呢比如
struct Node
{
struct Node* next;
int val;
};
}
//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. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}2.命名空间使用
命名空间中成员该如何使用呢
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int a 0;
int b 1;
int Add(int left, int right)
{
return left right;
3. C输入输出
}
struct Node
{
struct Node* next;
int val;
};
}
int main()
{
// 编译报错error C2065: “a”: 未声明的标识符
printf(%d\n, a);
return 0;
}命名空间中还可以定义结构体
#include iostream
using namespace std;
namespace guoguo {typedef struct STlist {int val;int capicity;}STL;
}
int main() {guoguo::STL a;guoguo::STL n1;a.val 10;n1.val 20;cout a.val endl;cout n1.val endl;
}命名空间的使用有三种方式1.加命名空间名称及作用域限定符 N::a2.使用using将命令空间中某个成员引入 using std::cin3.使用using namespace 命名空间名称引入 using namespace在同一个项目中通过构建不同的命名空间就可以实现有同名函数的存在。并且这两个函数可以做到互不干扰。在c语言中我们使用printf来完成输出操作然后使用scanf来进行输出操作。 而在C中我们通过流进行实现。就让HellowWord来进入我们学习C的第一弹c
#include iostream using namespace std; // std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中 int main() {
cout Hello,Word! endl;//endl相当于c语言中的\n
}
二、C的输入输出 注意:在使用cin cout时需要包含这个头文件以及按命名空间的使用方法是std 是流插入运算符是流提取运算符 cin 和cout可以自动识别变量的类型 #include iostream
using namespace std;
// std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中
int main() {int a;double b, c;char d;cin a;cin b c;cout a endl;cout b c endl;return 0;
}C也是兼容c语言的所以也是可以使用scanf和printf来进行输入输出。
三、缺省参数
1.缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实 参则采用该形参的缺省值否则使用指定的实参。
void Func(int a 0)
{
coutaendl;
}
int main()
{
Func(); // 没有传参时使用参数的默认值
Func(10); // 传参时使用指定的实参
return 0;
}2.缺省参数分类
缺省参数分为全缺省和半缺省 全缺省
void Func(int a 10, int b 20, int c 30)
{
couta aendl;
coutb bendl;
coutc cendl;
}
int main(){Func(, ,40)//缺省参数不能跳着来会报错Func(10,20)return 0;
}半缺省
#include iostream
using namespace std;
void Func(int a, int b 10, int c 20)
{cout a a endl;cout b b endl;cout c c endl;
}
int main() {Func(20);Func(5, 20);return 0;
}注意
半缺省参数必须从右往左依次来给出不能间隔着给缺省参数不能在函数声明和定义中同时出现
//a.h
void Func(int a 10);
// a.cpp
void Func(int a 20)
{}
// 注意如果生命与定义位置同时出现恰巧两个位置提供的值不同那编译器就无法确定到底该用那个缺省值缺省值必须是常量或者全局变量C语言不支持
四、函数重载
1.函数重载概念
函数重载是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型不同的问题。
#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;
}
// 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;
}
int main()
{
Add(10, 20);
Add(10.1, 20.2);
f();
f(10);
f(10, a);
f(a, 10);
return 0;
}C支持函数重载的原理–函数名修饰 那么为什么C支持函数重载而C语言不支持函数重载呢 在C/C中一个程序要运行起来需要经历以下几个阶段预处理、编译、汇编、链接。 在C语言编译器编译后函数的名字不发生变化。 而在linux编译后函数的g函数修饰后变成【_Z函数长度函数名类型首字母】。例如int 类型就为 i char类型就为 c 而int指针则为 Pi 在c中的编译器后函数名较为难懂就先看Linux中的。 通过这里就理解了C语言没办法支持重载因为同名函数没办法区分。而C是通过函数修饰规则来区分只要参数不同修饰出来的名字就不一样就支持了重载。 要注意一下如果两个函数的函数名和参数相同返回值不同是不构成重载的。因为编译器无法区分。 函数重载是通过函数名来进行区分的 举例
void Swap(int a, int b) {//
}
void Swap(int x, int y) {//
}像上面那样就不构成重载。只与形参类型有关而与形参名无关。 本篇内容到此结束谢谢大家观看。