呼和浩特市网站建设,徐州市建设局网站,电子商务网站建设与管理答案,培训机构营销方案文章目录命名空间C输入与输出缺省参数函数重载命名空间 在C/C中#xff0c;变量、函数和后面要学到的类都是大量存在的#xff0c;这些变量、函数和类的名称将都存在于全局作用域中#xff0c;可能会导致很多冲突。使用命名空间的目的是对标 识符的名称进行本地化#xff0… 文章目录命名空间C输入与输出缺省参数函数重载 命名空间 在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标 识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。 #includestdio.h
#includestdlib.hint rand 0;
int main()
{printf(%d\n,rand);return 0;
}这也证明了C语言并不能避免重定义这类问题所以接下来我们要解决的事情就是重命名问题。 解决重命名问题有三种方法 1.指定命名空间访问2.常用部分展开3.全局展来并不常用 指定命名空间访问 这类方法会在以后的实际开发的项目工程种经常使用但是并不方便日常练习。 #includestdio.h
#includestdlib.h
#includezzm1.hint a 0;
int main()
{int a 5;printf(%d\n,a);//5printf(%d\n,::a);//0printf(%d\n,Azzm::a);//10return 0;
}//头文件zzm1.h
namespace Azzm
{int a 10;
}定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。命名空间是可以嵌套的当两个命名空间的名称是一样的编译器会认为将两个命名空间合并成为一个。 命名空间中可以定义变量/函数/类型 从上面的代码中可以看出查找a的信息是从函数内开始找的没有找到再去全局中查找。::作用域限定符就是指定空间查找的当::的前面没有东西或者为空格时意思就是指定的空间为全局在::的前面加上Azzm就是去该名字的命名空间去查找。 ------------------------------------------------------------------------------------------------------------- 常用部分展开 该方法在以后的实际开发项目当中也会经常的使用但是并不适合平时的练习。 #includeiostream
//using namespace std;
using std::cout;
using std::endl;int main()
{int a 0;coutaendl;cout hello world endl;cout c endl;return 0;
}部分展开可见上面的代码已经方便多了 ----------------------------------------------------------------------------------------------------------- 全局展开 该方法经常使用于平时的练习非常的便利但是并不适合实际开发当中的项目。 #includeiostream
using namespace std;
//using std::cout;
//using std::endl;int main()
{int a 0;coutaendl;cout hello world endl;cout c endl;return 0;
}全局的展开同样也带来了命名与函数名的冲突问题有利也有弊。 一般情况下是不建议全局展开的。 C输入与输出 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件以及按命名空间使用方法使用std。cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。是流插入运算符是流提取运算符。使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。C的输入输出可以自动识别变量类型。实际上cout和cin分别是ostream和istream类型的对象和也涉及运算符重载等知识这些知识我们我们后续才会学习所以我们这里只是简单学习他们的使用。后面我们还有有一个章节更深入的学习IO流用法及原理。 注意早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间规定C头文件不带.h旧编译器(vc 6.0)中还支持iostream.h格式后续编译器已不支持因此推荐使用std的方式。 #includeiostream
using namespace std;
int main()
{int n0;cin n;double arr[5];for (int i 0; i n; i){cin arr[i];}for (int i 0; i n; i){cout arr[i] endl;//endl\n}return 0;
}使用cout和cin的好处是它可以自动识别类型方便了很多。当需要控制浮点数精度的时候可以继续使用printf和scanf相对于这两个控制精度更加的简便c是兼容c的。所以在我们使用时那种更方便就是用那种都是取决于自己。 缺省参数 缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参。 void Func(int a 0)//默认值a0
{coutaendl;
}
int main()
{Func(); // 没有传参时使用参数的默认值Func(10); // 传参时使用指定的实参return 0;
}缺省参数分类 全缺省参数 void Func(int a 10, int b 20, int c 30)
{cout a a endl;cout b b endl;cout c c endl;
}半缺省参数 void Func(int a, int b 10, int c 20)
{cout a a endl;cout b b endl;cout c c endl;
}注意 半缺省参数必须从右往左依次来给出不能间隔着给缺省参数不能在函数声明和定义中同时出现(在声明当中出现) //test.cpp
#includetest.h
int main()
{Func(1);return 0;
}
//test.h
#includeiostream
using std::cout;
using std::endl;void Func(int a 10, int b 20, int c 30);//注意
//zzm.cpp
#includetest.hvoid Func(int a , int b, int c )//注意
{cout a a endl;//1cout b b endl;//20cout c c endl;//30
}缺省值必须是常量或者全局变量C语言不支持编译器不支持 函数重载 函数重载是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型不同的问题。 形成函数重载有三种不同的条件符合其一就可以实现函数重载。 参数类型不同参数个数不同参数顺序不同 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;
}在这里简单介绍一下c和c分别的识别函数的方法c是直接就通过函数名来识别所以c也就不能出现相同的函数名在统一作用域。而c是通过函数名和参数来识别函数的所以也就可以实现相同的函数名返回类型并不能作为识别函数的方法。 最后文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出