C++基础入门篇——入得三寸天地,匀开理想三旬

2024-02-17 20:50

本文主要是介绍C++基础入门篇——入得三寸天地,匀开理想三旬,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 传统艺能😎
    • 前言😎
    • 选择😎
    • 嘛是C++😎
    • 命名空间🤔
    • 域作用限定符🤔
    • C++输入与输出🤔
    • 缺省参数🤔
    • 函数重载🤔

传统艺能😎

小编是双非本科大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055)
此前博客点我!点我!请搜索博主 【知晓天空之蓝】
乔乔的gitee代码库(打灰人 )欢迎访问,点我!

🎉🎉非科班转码社区诚邀您入驻🎉🎉
小伙伴们,打码路上一路向北,背后烟火,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我

🎉🎉🎉倾力打造转码社区微信公众号,等你加入!🎉🎉🎉


在这里插入图片描述

前言😎

没错,当你看到这里的时候说明我们C语言部分已经完结辣,初级的数据结构基础已经拿捏,我将步入C++的净土。

在这里插入图片描述

你可能会说:啊这,不是上一篇才八大排序,算法还没搞完就跳到C++了?是什么让我做出这么跳跃的决定

首先算法本来就是代码的思想素养,他应该在积累中绽放身姿,本来我想放在最后期来学习和讲解,现在写出来单纯是因为觉得现在咱有能力拿捏他,何尝不去细节的拿捏一波呢?所以这和本来我计划的学习大纲并不冲突捏~
在这里插入图片描述

选择😎

至于我为什么会选中去深入学习 C++ 也是有原因的,并非脑子发热一时兴起之举。

在学习C语言之初就为未来学习方向打听了解了很多,很长时间后我才决定将我的目光投向 C++ 或者 JAVA,二者对于我这个又菜又爱玩的萌新来说无疑都极具吸引力,但是鱼和熊掌不可兼得,专精才是真爱,海王最后注定一无所有,摒着这个思想我狠狠去各大网站平台,某乎,pilipili,CSDN,甚至浏览器上各种不知名散装帖子。我承认,各抒己见,我被灌输了很多不同的意见和观点,导致我对于选择更加焦灼与懵b。

因此我转身去了解了一手前端和后端,从本身去了解 c++ 和 扎瓦,两者学习难度是一样的,憋听世面上说什么扎瓦简单易学,从来没有一门语言是简单易学的,简单易学的语言只适合小型玩具程序,而且从目前Java庞大的类库看来,简单易学好像根本没有了;最后综合了心态,环境和个人兴趣还是把镖扔向了C++

嘛是C++😎

C++和C一样吗?跟卡巴斯基和巴基斯坦一样,有个基巴关系,但也不是完全没关系,C++里面好歹带了个C,就不难知道他和 C 语言还多少有点渊源。

C语言是模块化和结构化的语言,只适合处理规模小的程序,对于复杂的大规模程序,C语言需要高度的建模与抽象,就显得尤为吃力与不适,为了解决这个尴尬,80年代提出了OOP,即 面向对象编程,C++,因此横空出世。

(搬个老图,面对对象实在太草了)

在这里插入图片描述

这是在C语言基础上引入并扩充了面向对象概念,为了表达和C语言的渊源,就命名为了C++(最早是贝尔实验室命名为 C with classes,即加入了类的概念)。

某度对面向对象的定义是这样的:

面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。. OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。. OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。. OOP=对象+类+继承+多态+消息,其中核心概念是类和对象

在这里插入图片描述

不慌,我们慢慢来

命名空间🤔

但凡有看过C++的铁汁都会注意到,C++里面有个头文件是

 #include<iostream> 

他就相当于我们C语言里面的<stdio.h>,他是在控制台对 IO 流进行输入输出操作的,接着你会看到一个

using namespace std;

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称。using 就是引用,他在引用一个命名空间 namespace,我们这里又会牵扯到一个命名冲突问题,即同一个域里面,不能有同名变量,C语言没有很好的解决这个问题,而CPP正好帮他擦了屁股

像C语言里面二级指针啥的太绕了,因此C++就产生了引用这个概念,本质上就是在对C语言的一个补充作用,所以C++基础语法也是无时无刻在为C语言补坑。要知道我们定义一个变量要注意两点,一就是要符合命名规则,二就是不能和关键字重名,比如定义了一个叫 number 的同时再定义一个叫 number 的函数或者定义一个 number() 函数,但在另一个可用的库中也存在一个相同的函数 number()。这样,编译器就无法判断您所使用的是哪一个 number() 函数

但是引用了命名空间就不一样了,这个空间仿佛一片净土给予他逍遥法外的机会,就是这么个原理。
在这里插入图片描述

域作用限定符🤔

我们在程序里定义了两个同名变量 a,一个是全局变量一个是局部变量,那么我能在 main 函数里面 printf 一下全局变量 a 的值吗?答案是可以的!我们写作如下:

int a = 0;
int main()
{
int a = 1;
printf("%d\n",a);//打印局部变量 1
printf("%d\n",::a);//打印全局变量 0
}

那么问题来了,这个 ::到底何方神圣?他就是域作用限定符,双冒号左边是空白,我们就默认它是全局变量的 a 。

所以就可以知道命名空间是如何解决命名冲突问题的,如下是一个命名空间域,他和结构体不一样啊,他的作用是让里面的成员和外界成员形成一个隔离,需要访问域内成员就可以单独访问,避免冲突。

namespace room//命名空间域
{
int a = 0;//全局变量名
int rand = 0;//stdlib库变量名
}
printf("%d\n",room::a);
printf("%d\n",room::rand);//域内成员访问

注意如果多文件下定义了重名的命名空间,它是可以同时存在的,语法会默认将同名的命名空间进行合并。但是命名空间里面如果有重名的变量就会发生冲突,同样的道理我们可以借助命名空间的嵌套解决,再加一层命名空间即可,注意命名空间套个两三层就绝对的多了不可多套。

我们要用命名空间里的对象时,直接啪一句即可

 using namespace xxx;//把xxx这个命名空间定义的东西放出来

就好像一个声明告诉你现在隔离层拆了,freedom!变得和全局变量差不多;我们甚至还能继续向里展开,比如 room 里的变量 a ,我们命名空间不能完全展完,展完就没有意义辣!严格来说不能随便去展开。
在这里插入图片描述

所以我们常见的一句声明: using namespace std;

这里 std 就是对C++库的封装,当然不写这句话也行,实际应用就需要域作用限定符去指定域名。我们放出来虽然方便使用,但是存在冲突风险,比如定义一个全局变量 cout 后使用 cout<<cout<<endl。为了解决冲突与方便问题,我们提出了第三种方式,非全展开,我们展开常用的就行:

using std::cout;

C++输入与输出🤔

C语言输入输出需要我们指定类型的 scanf 与 printf ,C++里面又不一样了,我们对应使用的是流提取运算符 >> 和流插入运算符 <<

cin >> a;
cout << a;

这个在C++里面叫运算符重载,cin 和 cout 叫对象,属于类和对象的知识,暂只做了解。

他相比C语言的改进就非常奈斯了,因为输入输出可以多组输入输出,不用指定数据类型且可以交错类型,比如:

int a;
float b;
cin >> a >> b;
cout << a << b << endl;//endl相当于一个换行关键字,等价于‘\n’

但是C++想控制浮点数的位数输出就很麻烦了,想了解的情自行上网查询,但是极其不推荐,因为你会了也记不住,而且别忘了C++兼容C语言,直接C语言多方便啊是吧,所以要控制格式推荐C语言实现。
在这里插入图片描述

缺省参数🤔

C++引入了一个新的概念叫缺省参数,也叫默认参数,这是C语言没有的语法,指调用函数没有传参时,会使用参数的默认值,就好像你若安好,备胎到老。

那如果对应是多个输入呢?是不是需要多个缺省参数,备胎成堆那不是更渣吗?

void func(int a = 1,int b = 2,int c= 3)
{
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "c= " << c << endl;
}int main()
{
func();
func(10);
func(10,20);
func(10,20,30);
return 0;
}

结果如下:
在这里插入图片描述

我们这里是给所有参数都给出了默认值,我们称之为全缺省,有全必有不全,我们的半缺省就横空出世了,半缺省还有一些细节需要注意,他必须是从右往左缺省并且是连续的

全缺省和半缺省的选择视情况而定,在某些情景里面半缺省也是很奈斯的,比如我们的栈。

struct Stack
{
int* a;
int size;
int capacity;
};void StackInit(struct Stack* p,int n = 4)
{
assert(p);
p->a =(int*) malloc(sizeof(int)*n);
p->size = 0;
p->capacity = n;
}
int main()
{
Stack st;
StackInit(&st,100);//初始容量和扩容参数上比较方便
}

函数重载🤔

又来补坑辣,C语言不支持同名函数,但是C++支持。

要求就是参数名相同而参数不同,比如个数,类型等等。我们需要知道函数重载到底有什么意义,C语言为什么不支持?比如我实现 swap 函数来交换两数的值,分别交换一组整型和一组浮点数,两组数类型不同因此需要两个 swap 函数,是不是想到就很不爽。

所以C++支持同名。,看起来是一个函数但实际是相互独立的,后期的模板就能把这个玩通透。

今天就到这里吧,摸了家人们。

这篇关于C++基础入门篇——入得三寸天地,匀开理想三旬的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718955

相关文章

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、