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++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现