0
点赞
收藏
分享

微信扫一扫

防爆定位信标有哪些功能?防爆定位信标适用于哪些位置?

乐百川 2024-07-24 阅读 24

目录

C++发展历史

起源与初期阶段(1979-1985)

标准化与C++98(1990s)

技术进步与C++11(2011年)

进一步的现代化(C++14至C++20)

当前与未来

c++版本

c++基础

命名空间

定义

::操作符被称为作用域解析操作符

命名空间的嵌套定义:

多文件在一个命名空间

命名空间的展开

C++的输入输出

输入输出流(I/O Stream)

缺省函数

定义

代码举例

重载函数

引用

引用的概念和意义

引用的特性

引用的使用


C++发展历史

        C++是一种强大的多范式编程语言,它的历史可以追溯到1979年,由丹麦计算机科学家Bjarne Stroustrup在贝尔实验室开始研发。以下是C++发展的主要里程碑:

C++老登:Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不 同的地⽅可能有差异)在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作

这老登长这样:


c++版本

c++基础

c++的第一个程序:

#include<iostream>//标准IO(输入/输出)流

using namespace std;//标准命名空间

int main() {
	cout << "Hello C Plus Plus" << endl;
    return 0;
}

ok现在我们已经掌握了c++的输出了

命名空间

        在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全 局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名 冲突或名字污染,namespace关键字的出现就是针对这种问题的。

举一个C语言的例子来对比

#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main() {

	printf("%d\n",rand);
	return 0;
}

为什么会报rand重定义的错误?

这个是#include<stdlib.h>中的,就是因为有名字重复,所以有时候你做项目的突然需要一个头文件的时候,突然报了个重定义错误,或许你会说我不定义全局变量就行了,但是这是避免不了的,你可以去看一下我的项目专栏

这种问题后来就被我们的c++老登给优化了,于是就出现了namespace(命名空间),那我用命名空间写一下:

#include<iostream>
#include<stdlib.h>
namespace YM{
	int rand = 10;
}

int main() {
	printf("%d\n", YM::rand);

}

可以看到我这里自己定义了一个命名空间,为什么这里就不会有影响了嘞?

定义

命名空间的声明语法非常简单,通常形式如下:

namespace 命名 {
    // 命名空间内的定义
}

这里提到的域,我相信大家应该都懂,作用域不一样,所以就不会一样,YM::rand 就是访问YM这个命名空间域里面的rand

::操作符被称为作用域解析操作符

全局作用域解析:当你在一个局部作用域(如函数体内)中想要明确引用全局作用域的某个标识符(如全局变量、函数等)时,你可以使用::来指明你要访问的是全局作用域中的那个标识符,而不是当前局部作用域中可能存在的同名标识符。例如:

#include<iostream>

using namespace std;
int x = 20;
int main() {
	int x = 10;
	cout << ::x << endl;
	return 0;
}

这里加了域操作符,但是前面啥也不加,就是访问的全局域

命名空间的嵌套定义:

#include<iostream>

namespace YM {
	int x = 10;
	namespace xy {
		
		int x = 20;
	}

}
namespace tmp {
	namespace x {
		int rand = 20;
		int sum(int x, int y) {
			return x + y;
		}
	}
	namespace y {
		int rand = 30;
		int sum(int x, int y) {
			return x * y;
		}
	}
}
using namespace std;
int main() {
	
	cout << YM::x << endl;
	cout << YM::xy::x << endl;

	cout << tmp::x::rand << endl;
	cout << tmp::y::rand << endl;

	cout << tmp::x::sum(3, 2) << endl;
	cout << tmp::y::sum(3, 2) << endl;

	return 0;
}

大家可以把这个代码拷贝过去自己感受一下

多文件在一个命名空间

我们可以看到这里我将栈和队列都放在一个命名空间里面

从这里你是不是有一种封装数据结构的感觉,这里就可以证明我们如果在公司里面将我们写的程序弄到一个namespace1空间中然后上传到一个namespace2里,然后我的同事用同样的方法也可以进行上传到namespace2,因为域之间互不干扰,这样就会非常爽!!!

命名空间的展开

这个是标准命名空间的展开

我们也可以自己定义

不展开

展开

你可以看出来它展开和不展开的区别:

C++的输入输出

这边我就不和大家说那些没用的废话直接上代码,我在代码下面放个解析

#include<iostream>
using namespace std;

int main() {
	//一
	int a = 10;
	cin >> a;
	cout << a << endl;

	//二
	int b, c, d;
	cin >> b >> c ;
	cout << b << endl << c << endl;
	cout << b << " " << c << ' ' << endl;


}

解析

缺省函数

定义
代码举例

这里我们缺省了1这个参数(半缺省)

这边我还可以直接缺省两个参数(全缺省)

你不要觉得这个没有用,比如你在开空间扩容的时候,你就可以给一个默认值,就会方便很多,如果突然需要一个很大的空间,你直接传个值过去就覆盖掉默认值


重载函数

        C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的。

这个在C语言就是没有的,你们会发现有了这个重载函数会非常爽,在C语言中,如果我们换了一个类型,我们就的重新命一个函数,不支持一个函数名支持多个种类型

在定义重载函数,一定保持参数顺序相同,不然就会报错,这也是老登规定的,没有为什么

返回值不同不能作为重载条件,因为调⽤时也⽆法区分

我们来看一个纯在歧义的重载函数,这种以后千万别写,我感觉有一点画蛇添足

不传参,会报错,因为第一个无参,第二个是缺省函数

当我给他传上参数他又满血复活了,哈哈哈

引用

引用的概念和意义

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。⽐如:⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋 ⻛";林冲,外号豹⼦头

类型& 引用别名 = 引用对象

C++中为了避免引⼊太多的运算符,会复⽤C语⾔的⼀些符号,⽐如前⾯的>,这⾥引⽤也和取 地址使⽤了同⼀个符号&,⼤家注意使⽤⽅法⻆度区分就可以。(吐槽⼀下,这个问题其实挺坑的,个 ⼈觉得⽤更多符号反⽽更好,不容易混淆

其实简单来说就是取了个别名

我们打印一下他们的地址看一下是不是一样

其实这里已经说明了他们底层是指针,大家可能觉得这样写会有点怪,哈哈,其实这个在函数传参的时候,会非常方便

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

这里有一个案例,很多同学喜欢把这个认为是在改变a

这里的c只有一个赋值作用,我们可以看出地址是不一样的,如果这里认为c是在改变a的话说明你C语言指针需要复习一下,哈哈哈,加油少年

引用的使用

接下来我用代码解释这个引用的应用

看吧,我这个很形象了吧,用引用的话,我们就可以不用再传参数的时候写一个&地址符,这样也好理解一点,我估计有可能老登也觉得指针有一点太复杂了

这种千万不要觉得奇怪,他是一个LTNode*的指针传参,自然也要是LTNode*的别名来接收

这边还没有写完后面还有一些内容,明天补,哈哈哈

举报

相关推荐

0 条评论