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++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例