【命名空间、函数重载、缺省、引用】C++入门、基础,初学C++学习第一节内容

学习内容一↓

学习c++首先第一行代码必须要知道是什么意思,不然hello world都打印不出来就直接被劝退了!!!
#include <iostream>//c++的输入输出流库

这行代码的意思就等同于C语言中 #include <stdio.h> 的意思,对文件内容进行输入输出!

学习内容二↓

第一行代码学完了那么第二行代码就一定是这个!!!

using namespace std;
using 顾名思义就是使用的意思,namespace是命名空间的意思,就是我要使用std的空间,就是说用C++的标准名字空间,C++库所有的东西都是放到std命名空间中的,std中包含了很多内容大家可以自己详细了解。通常我们自己在做练习的过程中可以直接声明这样调用std中的变量就非常方便了,但是如果在工程中是不推荐去这样做的,推荐大家用下面这种方式进行命名点我跳转到

命名空间的使用有三种方式:

假设我定义了一个变量名为N的命名空间

namespace N
{
	int a = 0;
	int b = 20;
	int Add(int left, int right)
	{
		return left + right;
	}
	int Sub(int left, int right)
	{
		return left - right;
	}
}
1·加命名空间名称及作用域限定符
int main()
{
	printf("%d\n",N::a);//N就是命名空间 而a就是我空间内声明的变量
	return 0;//我需要按照这种这个对他进行输出才会打印出来
}

显然上面这种的输出方式有点麻烦,那么请看第二种

2。 使用using 将命名空间中成员引入
using N::b;//在这里我声明了我需要使用N空间内的b变量
int main()
{
	printf("%d\n", N::a);
	printf("%d\n", b);//声明之后我就可以直接进行使用 是不是很方便
}

那我要每用一个变量我就得声明一下,那也太冗余了吧
于是第三种更简洁的方式就有了

3.使用using namespace将命名空间名称引入
using namespace N;//我们只需要在using后面加上namespace之后
int main()
{
	printf("%d\n", a);//这些变量就都可以直接使用了
	printf("%d\n", b);
}

如果在工程中推荐大家这样使用这样可以减少一部分的消耗~

using std::cout;
using std::endl;
using std::cin;

学习内容三↓
上述代码中的cout、endl、cin是什么意思呢,举个例子你就知道了

int a = 0;
printf("%d\n", a);//结果为: 0 (后面\n有个换行)
cout << a <<endl;//结果为 : 0 (这里后面也有个换行)
所以直接这样理解printf == cout  \n==endl
而这里的<<符号是什么意思呢?
<<表示的是输出的意思 把a的值输出给cout打印出来
而下面的cin同样举个例子说明
int a =;
scanf("%d"&a);//a的值为控制台输入的内容
cin  >> d;// >>表示的就是输入 同样也代表a的值为控制台输入的内容
通过c语言的同类比较你应该能理解这其中的意思吧!

学习内容四↓

缺省

缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该
默认值,否则使用指定的实参。

void Func(int a = 0)
{
	cout << a << endl;
}
int main()
{
	Func();// 0
	Func(10);//10
}
这个代码大家一看便知是啥意思了

而缺省又分为全缺和半缺同样代码示例一看便知了大家

//·全缺省参数
void TestFunc(int a = 10, int b = 20, int c = 30)
{

	cout << "a =" << a << endl;
	cout << "b =" << b << endl;
	cout << "c=" << c << endl;
}
//·半缺省参数 缺省部分参数  重点!!!-> 缺省参数必须连续从右往左
//  没有缺省的 参数必须传递
void TestFunc1(int a,int b = 10, int c = 20)
{

	cout << "a=" << a <<endl;
	cout << "b =" << b << endl;
	cout << "c =" << c << endl;
}
int main()
{
	Func();//没有传参使用参数默认值
	Func(10);

	//调用时,如果要传参必须从左往右依次传参
	TestFunc();
	TestFunc(10);      //全缺省可以转入任意个实参
	TestFunc(10, 20);
	TestFunc(10, 20,30);
	同样如果你把这些代码片段看完了,你就已经是懂了
	return 0;
}

学习内容五↓这个是文章最重要的知识点了

函数重载

通常在面试中会被问到这么几个问题!
1、什么函数重载?
2、C + 是如何支持函数重载的 ? 为什么C言不支持?
3、程序编译成可执行文件的过程?
这三个问题是相互联系的哦!

先看完函数重载的介绍你就大概明白了

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的 同名函数 ,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同 形式参数(指参数的个数、类型或者顺序)必须不同 也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。

直接上代码

int Add(int left, int right)
{
	return left + right;
}
double Add(double left, double right)
{
	return left + right;
}
long Add(long left, long right)
{
	return left + right;
}

这三个函数是允许在c++中进行同名使用的,想一想,C语言中可以吗?

答案是不可以的,在c语言中这么定义,你不用编译,Vscode就已经直接给你报红了?

为什么c++可以c语言不行呢?

首先你必须了解程序编译成可执行文件的过程,他的大概过程分为

  1. 预处理 -> 头文件的展开/宏替换/条件编译/去掉注释
  2. 编译 -> 检查语法,扫描、语法分析、语义分析、源代码分析、目标代码生成、目标代码优化 生成汇编代码 生成 .s文件
  3. 汇编 -> 汇编代码转成二进制的机器码 生成 .o文件
  4. 链接 -> 将目标文件链接在一起
    这四部分大部分都是一样的两个语言的编译过程,但是在调用函数寻址的过程中出现了不同
    在这里插入图片描述
    图上是c++的符号表可以看到add函数前面是 <_Z3Addii>我们来拆解一下
    可以分为_Z3 、add、ii这三个部分Z3为随机生成 add为声明函数 ii为函数中定义的参数类型 同名的函数只需要满足重载的要求 那么c++在编译后一定能找到指定的函数

而在C语言中
在这里插入图片描述
你可以看到在符号表中就只是函数名,那么同时定义几个相同的函数,在编译运行的时候就不能通过函数名去找到对应的地址了。

所以总结一下就是: C ++和C在程序编译可执行文件的时候在链接的过程中的时候的函数名修饰规则不一样C++可以区分而C语言不行

学习内容六↓这个是文章最后一个知识点了

引用

引用特性
1.引用在定义时必须初始化
2.一个变量可以有多个引用
3.引用一旦引用一个实体,再不能引用其他实体

看一下代码理解一下

int a = 1;
//int& b;//这样是会报错  引用必须在定义时初始化
int& c = a;//类似于指针取a的地址 相当于给a去了一个别名
int d = 2;
c = d;// 分析:这里是c成了d引用? is no  还是将d值给c  is ok

大家再看下面这段代码

const int a = 0:
// int& b =a;
// b的类型是int,编译不通过,原因:a是只读,b的类型是int,也就是可读可写的。

const int& b = a;//为什么这样又是可以的呢?
	int c = 1; 
	int& d = c;
const int& e = c// 行不行?可以->c只是可读可写,e变成别名只读
// 总结:引用取别名时,变量访问的权限可以缩小,不能放大

//那么这样呢?
int i = 0;
double db =i:// 隐士类型转换 这样也是可以的
const double& rd =i;//这样也是可以的 想想为什么可以呢?
const float rf=i;const float 
rf是只读的和i并没有什么关系 
类型不同时赋值时	会存在一个临时变量,而这个临时变量具有常性 
相当于i把值给了临时变量,临时变量再又赋给了rf  所以不会出现问题

总结:一共六个小的知识点,不是很难都很基础,希望大家能够掌握,如果学习到了一些东西,可以给我点个赞!
明天继续,刚开始学c++记录贴,大家一起学习起来吧!!!加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我中意你呀丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值