知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

c++基本语法(缺省参数,函数重载)

发表时间:2022-03-25来源:网络

c++基本语法(缺省参数,函数重载)
一.C和C++的区别
1.C语言和C++在作用域上,c++除了具有c语言具有的局部作用域和全局作用域以外新增加了命名空间;
2.如果在全局变量中,变量名如果冲突了,C语言(除了把名字取的长一些似乎没有更好的办法了),C++为了优化C语言这一缺点引入命名空间;
3.C和C++在底层调用的修饰规则也略有不同,详情后文演示;
二.C++中新增语法
1.作用域的使用方法

namespace N1{ //N1为变量名 int a=10; //可以定义变量; int Add(int a,int b){ return a+b; //可以定义函数 } struct Add{ int a; int b; struct Add*C; //定义结构体 } namespace N2{ //命名空间的嵌套 int a=20; int b; }

2.一个变量在多个作用域中同时出现的调用规则

int a=30 //全局变量 int main() { int a=40; printf("%d\n",a) //输出结果为40,就近原则; printf("%d\n",::a) //输出结果30,运用作用域限定符,访问全局作用; printf("%d\n,N1::a) //输出结果10,对N1解引用,访问N1的命名空间; printf("%d"\n,N1::N2::a);//访问嵌套命名空间里的a; }

如果不想每次都输入作用域限定符,还可以有以下操作:

using N1::a; //操作1:在函数前用using导出 int main() { printf("%d\n",a);//a=10 } using namespace N1;//操作二 int main() { printf("%d\n",a);//a=10 }

这样做的缺点是:可能与全局变量冲突
tips:在C++中可以定义相同的命名空间,只是编译的时候会合并成一个;

三.缺省参数的概念(备胎)
a.全缺省参数:所有参数都带有默认值(从左往右匹配)
b.半缺省参数:只有部分参数带有默认值(从右往左赋值,系统优先认为左边还没有值,可以解释全缺省为什么从左往右匹配)
tips:缺省参数不能在定义和声明中同时给出,主要原因是如果给的不一样,编译器会报错;(在声明中给会好一些)

四.函数重载–多义词
相同作用域中,函数重名,参数列表不同;
参数列表不同:①参数个数不同 ②参数类型不同 ③类型次序不同 ④返回类型不同(无关)
编译器在编译阶段必须对实参进行类型推演,根据推演结果调用相应函数


五.C和C++在底层调用时的区别
在C中底层调用时都是在函数名前加’_’ 在重载时都相同,编译器并不能有效识别,所以C语言不支持重载;

C++底层调用规则:将函数和参数类型结合在一起(将参数类型编译到名字中)
例如:int Add(int left,int right)–>?Add@@YAHHH@Z
double Add(double left,double right)–>?Add@@YA@NNN@Z;

tips:在c++中想用c语言语法?可用‘extern"c" ’
作用:让编译器按C语言语法规则在C++中编译

收藏

上一篇C++ 语法

下一篇C C++ 语法

  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜