c++的重载,缺省参数,以及命名空间

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
关于c++的几个小方面的想法

1.为什么c++支持重载

C++支持函数重载而C语言不支持函数重载。
而所谓的函数重载就是指:
在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同或类型不同),返回值可同可不同。
那么问题来了,为什么C++支持函数重载,而C语言不支持呢?
因为在编辑链接过程中会生成符号表
一个函数的声明为:
void A(int x,int y);
在c语言中,编译器在编译后在符号表里的名字为_A
在c++中,编译器在编译后在库中的名字为_A_int_int
也就是说即使函数同名,也会因为不同的参数类型,不同的参数个数而产生不同的名字,也就对应这不同的函数,也就从而实现重载了。

2.缺省参数

缺省参数就是在声明或者定义函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。
缺省参数使用主要规则:
1.调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。
2.缺省值必须是常量。显然,这限制了缺省参数的数据类型, 缺省参数必须通过值参或常参传递。
例如: void show(char * array,int length=1) ;
我调用可以: show(“hello”,6);

3.命名空间

c++ 中引入namespace(名字空间)的概念,主要是为了减少名字冲突的问题,随着源代码规模的增大,产生名字冲突的可能性也会越来越高,如两家公司的类库中都有一个名为“Stack”的类,那么当你需要同时用到这两个公司的类库时,就会产生名字冲突,无法区分是哪一个Stack,因此,一般公司都会把自己的类,函数,变量等放在一个名字空间中,防止冲突,如:
namespace s1
{
int a = 10;
}
namespace s2
{
int a = 20;
}
这样就在两个名字空间中声明了两个不同的变量 a,
如果想要同时在一个源文件中使用这两个 a,可以这样做:
int c = s1::a; // 表示 s1 中的 a
int d = s2::a; // 表示 s2 中的 a

猜你喜欢

转载自blog.csdn.net/weixin_40921797/article/details/80782136