👍作者主页:进击的1++
🤩 专栏链接:【1++的C++初阶】
一,前言
1.1 怎样去学C++
首先我认为,学好C++的前提是有好的C语言基础。在C++基础阶段,C++前期知识点较散,较多,而且难度也不小,因此我认为做好总结与笔记是非常重要的。写博客就是一个一举两得的方法。
二,命名空间
在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。通俗来讲就是:将我们用的变量,函数,类,围在我们建造的墙中,以避免和别人的冲突。
- 在命名空间中我们可以定义函数,变量,类型。
代码展示:
namespace hyp
{
int a;//定义函数
//定义函数
int Add(int a, int b)
{
return a + b;
}
//定义结构/类
struct Stack
{
int* a;
int top;
int capacity;
int size;
};
}
- 命名空间可以嵌套
代码展示:
#include<stdio.h>
#include<iostream>
using std::cout;
using std::endl;
namespace hyp
{
int a;//定义函数
//定义函数
int Add(int a, int b)
{
return a + b;
}
//定义结构/类
struct Stack
{
int* a;
int top;
int capacity;
int size;
};
//命名空间可以嵌套
namespace hypplus
{
int Sub(int a,int b)
{
return a - b;
}
}
}
int main()
{
int ret=hyp::hypplus::Sub(2, 1);
cout << ret << endl;
return 0;
}
-
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中 -
命名空间的三种使用方式
(1)加命名空间及作用域限定符
(2)使用using将命名空间中某个成员引入
(3)使用using namespace 将命名空间展开
三,缺省参数
3.1 什么是缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
3.2 缺省参数分类
全缺省参数
半缺省参数
- 半缺省参数必须从右往左依次来给出,不能间隔着给
- 缺省参数不能在函数声明和定义中同时出现,否则恰巧两个位置给的缺省参数不同,那么编译器就不知道取哪一个。
四,函数重载
4.1 什么叫函数重载
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
- 参数类型不同:
//函数重载
int add(int a, int b)
{
return a + b;
}
double add(double a, int b)
{
return a + b;
}
int main()
{
cout << add(1.1, 2) << endl;
cout << add(1, 2) << endl;
return 0;
}
注意:参数类型不同,不可以只是返回类型不同,形参类型也应该不同
- 参数顺序不同
double add(double a, int b)
{
return a + b;
}
double add(int a, double b)
{
return a + b;
}
int main()
{
cout << add(1.1, 2) << endl;
cout << add(1, 2.2) << endl;
return 0;
}
- 参数数量不同
int add(int a, int b)
{
return a + b;
}
int add(int a,int b,int c)
{
return a + b+c;
}
int main()
{
cout << add(1,2) << endl;
cout << add(1,2,3) << endl;
return 0;
}
4.2 为什么C++支持函数重载
在C/C++中,一个程序要运行起来,要经历:预处理–>编译–>汇编–>链接这四个阶段。
各个阶段所做的事情:
预处理阶段:预处理指令。
编译阶段:语法分析,词法分析,词义分析,符号汇总
汇编:形成符号表,汇编指令–>二进制指令,即生成.o文件。
链接:合并段表,符号表的合并和重定位。在链接时,链接器会通过函数名去找函数的地址,在C的编译器中,函数名并不会进行修饰,所以对于函数重载来说,函数名相同,编译器就分不清是哪个函数,而C++是会对函数名进行修饰,因此支持函数重载。