c++的学习之路:2、入门(1)

一、 C++关键字

c++的关键字要比c语言要多31个足足有63个,这里我只是了解了下每个有啥作用,具体使用方法以及更多的知识将在后续学习中,慢慢扩展使用,下方表格就是c++的63个关键字

asmdoifreturntryauto
doubleinlinetypedefdynamic_castinttypeid
publicbreakelselongsizeoftypename
throwcaseenummutablestaticwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructfriendclass
externoperatorswitchregisterconstfalse
privatetemplatetrueconst_castprotectedthis
whiledeletegotoreinterpret_castshortfor
boolsignedunionusingfloatvolatile
voidvirtualcontinue

二、命名空间

在刚学习c语言的时候,我遇到过定义了重复的变量名或者函数名,那时候喜欢都定义成a、b这些经常出现重定义,要不就是和库函数相同了,但是在c++中,提出了命名空间这个概念,他的大概意思就是把一块函数或者变量封存在一起,例如下方代码演示,就会出现如图所示的错误,这是就可以使用命名空间。

#include <iostream>
using namespace std;
int a = 0;

int a = 1;

int main()
{
    cout << a << endl;
    return 0;
}

如下图就是命名空间的最简单使用,说白了就是相当于重新建立了一个范围,并且把这块空间的变量啊函数啊等等的都包含在这里面,相当于一个库函数,但是不通过:: 这个符号的访问会找不到,这个符号前面就是需要寻找的空间名,也就是namespace命名的空间,如代码中LY1就是一个命名,这个命名可以自定义,我比较喜欢用我的名字缩写,所以之后的命名空间不出意外应该都是这样类型的。

#include <iostream>
using namespace std;
namespace Ly1
{
    int a = 0;
}

namespace Ly2
{
    int a = 1;
}

int main()
{
    cout << Ly1::a << endl;
    cout << Ly2::a << endl;
    return 0;
}

好了上文讲了为啥会有命名空间,那么接下来将讲下命名空间的三种用法 

1、加命名空间名称及作用域限定符

如上文中代码 cout << Ly1::a << endl;cout << Ly2::a << endl;这两句就是访问LY1和LY2进行打印输出两个空间a的数值就是加加命名空间名称及作用域限定符的使用方法,就不过多讲了,一般会用就可以。

2、使用using进行全部展开

如上文代码using namespace std;这个就是全部展开,这样我在下面使用cout和endl时就不需要再加上作用域限定符。

3、使用using部分展开

这个就如下代码和测试结果就是部分展开的使用,展开了所以a在使用中就不需要加上作用域限定符了,而b加上了,c没加上所以就报错了,没有找到c,为什们会有全展开和部分展开,因为在使用过程中,如果每一步都加上作用域限定符会显得很麻烦,所以在确定某个函数或者变量经常使用又不会出现重复时就可以进行部分展开或者全部展开方便进行使用。

namespace Ly1
{
    int a = 0;
    int b = 1;
    int c = 2;
}
using Ly1::a;
int main()
{
    cout << a << endl;
    cout << Ly1::b << endl;
    cout << c << endl;
    return 0;
}

命名空间是可以进行嵌套的,如下方代码 和测试结果就是找不到b变量,那是因为在Ly1这个空间里是Ly2并不是b所以要想a变量那要嵌套访问才能找到。

namespace Ly1
{
    namespace Ly2
    {
        int a = 0;
        int b = 1;
        int c = 2;
    }
}
int main()
{
    cout << Ly1::Ly2::a << endl;
    cout << Ly1::b << endl;
    return 0;
}

三、 C++输入&输出

输入和输出这是每个编程语言都会有的,例如c语言的scanf和printf,c++的就是cout和cin,他就是控制台输出和控制台输入,是一种流输入输出,就像c语言的文件管理时,要先调用file,想要使用文件就先要打开流一样,这里c++的输入与输出是可以自动识别类型的,这点就比c语言要人性一点,代码使用与测试结果如下,如图就是这个输入输出的使用,endl就是换行,值得一提是,他的流入与流出就是>><<这两个,这个在c语言中是位移操作,这里是向左就是流入,向右就是流出。

int main()
{
    int a = 1;
    double b = 2.22;
    cout << a << endl;
    cout << b << endl;
    cin >> a;
    cin >> b;
    cout << a << endl;
    cout << b << endl;
    return 0;
}                                    

四、 缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,这个最能体现的就是当时我学数据结构时,有个单链表用数组组成的,当时有个容量,我是在初始化就开辟了一点空间,但是只有4个字节,如果我想要存入100个int型的数据就要先开辟,那么这个缺省参数就可以很好的解决这个问题,因为当我知道有100个需要存储的数据,就可以直接给定100,直接开辟,省了很多消耗,下面我将讲下缺省参数的几种使用方式以及注意事项。

第一种就是如图这样不给函数参数就直接使用函数的形参

第二种就是给定参数,这时函数就使用实参的值,如图所示

接着就是第三种再有很多个形参时,是怎么使用,如图就是当有三个参数时,怎么使用,他还是有参数传递过来时使用实参的值,没有还是使用形参,但是这里要注意必须从右到左省略,不能传了a和c不传b,也不能传传后面不传a的,具体为啥,我也不知道,这就是c++规定的,而且还不能同时定义形参的值,就是不能在函数里定义了缺省参数,却又在声明时有定义一遍,c++也规定了只能在声明中定义,也就是当有声明时 ,只能在定义中声明,不能在函数中定义。


五、 函数重载

函数重载这个也是个很方便的,在c语言中如果有两个同样函数名的函数时也会报错,他在编译时会找不到使用那个函数,但是c++不一样,假如我定义两个ADD函数,一个加整数,一个加小数,就可以这样使用,代码与测试结果如图,就可以同时使用,这里就可以看出c++支持函数重名。

int ADD(int a, int b)
{
    return a + b;
}

double ADD(double a, double b)
{
    return a + b;
}

int main()
{
    int a = 1, b = 2;
    double c = 1.1, d = 2.2;
    cout << ADD(a, b) << endl;
    cout << ADD(c, d) << endl;
    return 0;
}

但是这个使用也是有限制:
1、参数类型不同

参数类型不同这个很好理解就如上文代码就是参数类型不用,int和double就是不同的类型。

2、参数个数不同

参数个数不同这个如下代码,一个两个一个三个就是参数类型不同,当然具体几个没有要求

int ADD(int a, int b)
{
    return a + b;
}

int ADD(int a, int b,int c)
{
    return a + b+c;
}

int main()
{
    int a = 1, b = 2,c=3;
    cout << ADD(a, b) << endl;
    cout << ADD(a,b,c) << endl;
    return 0;
}

3、参数类型顺序不同

参数顺序不同就是怎么说呢,直接上代码,这种就是参数类型不同,第一个就是double在前,第二个就是double在后,这种也是可以使用函数重载。

void Print(double a, int b)
{
    cout <<a << endl;
    cout << b << endl;
}

void Print(int a, double b)
{
    cout << a << endl;
    cout << b << endl;
}

int main()
{
    Print(6.66, 6);
    Print(6, 6.66);
    return 0;
}

还有一点就是函数重载他是在编译的时候找到对应函数的地址如下图汇编代码,两个call就是对应函数的地址。

这个函数在编译的时候是把函数名称提换成别的名字,如下图就是在Windows环线中编译报错提示找不到这个函数,也就是这个函数替换后的名字,具体怎么命名的我也不太清楚,Linux后期学了,会放Linux的命名规则图的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/557386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

归并算法详细解析

归并排序 1945年&#xff0c;约翰冯诺依曼&#xff08;John von Neumann&#xff09;发明了归并排序&#xff0c;这是典型的分治算法的应用。归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Di…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

Python学习:元组

Python 元组概念 Python 中的元组&#xff08;tuple&#xff09;是不可变的有序集合。它是一种数据类型&#xff0c;类似于列表&#xff08;list&#xff09;&#xff0c;但在创建后不能被修改。元组使用圆括号 () 来表示&#xff0c;其中的元素可以是任意类型&#xff0c;并且…

“洞见·智领未来——2024行业开局暨成渝(内江)服务外包产业发展大会”共商服务外包新未来新业态

3月19日-20日&#xff0c;由中国信息协会、中共内江市委、内江市人民政府指导&#xff0c;中国信息协会数字经济专委会、中共内江市东兴区委、内江市东兴区人民政府共同主办&#xff0c;鸿联九五集团、首席客户官百人会&#xff08;CCO100&#xff09;承办的“洞见 智领未来—…

Spring学习记录之注解开发

前面我们已经了解了Spring是如何创建Bean以及完成依赖注入的&#xff0c;但我们会发现&#xff0c;其似乎并没有达到简化开发的目的&#xff0c;这是因为 我们还没有接触到注解开发。 注解开发之组件 我们在要使用Bean的地方使用Comonpent&#xff08;组件&#xff09;注解&a…

Linux 文件系统:重定向、缓冲区

目录 一、重定向 1、输出重定向 2、输入重定向 3、追加重定向 4、dup2 系统调用 二、理性理解Linux系统下“一切皆文件” 了解硬件接口 三、缓冲区 1、为什么要有缓冲区? 2、刷新策略 3、缓冲模式改变导致发生写时拷贝 未创建子进程时 创建子进程时 使用fflush…

某招聘系统0day挖掘(获取4站点报告证书)

前言: 21年的挖的漏洞了 漏洞均已提交且均已修复,这里文章只做技术交流 挖掘过程 对我来说,毕竟喜欢直接黑盒挖0day,一个0day挖到后就可以刷上百分。 如该系统正常找了一个招聘系统用的比较多的 如该通用系统,该通用系统存在一个注册功能 正常的进行注册一个账户进去…

算法打卡day11

今日任务&#xff1a; 1&#xff09;239. 滑动窗口最大值 2&#xff09;347.前 K 个高频元素 239. 滑动窗口最大值 题目链接&#xff1a;239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移…

Windows 11 鼠标右键可选择 cmd 命令行选项

** Windows 11 鼠标右键可选择 cmd 命令行选项 ** 在文件夹内打开命令行&#xff0c;只能使用 Windows 自带的 PowerShell &#xff0c; 作为一个 cmd 重度使用用户来说很是折磨&#xff0c;需要打开 cmd 然后切换盘符再 cd 。。。 现在咱们自己创建一个可以打开 cmd 的方法…

【Leetcode每日一题】 递归 - Pow(x, n)(难度⭐⭐)(40)

1. 题目解析 题目链接&#xff1a;50. Pow(x, n) 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 在这个算法中&#xff0c;递归函数的任务是求出 x 的 n 次方。那么&#xff0c;这个函数是怎么工作的呢&#xff1f;它…

关于Devin,它只是人类历史的一个正常延续而已

近期&#xff0c;关于Devin的讨论无疑成为了科技界的热点话题。作为一款由初创公司Cognition AI研发的AI程序员&#xff0c;Devin凭借其惊人的“端到端解决成功率”和高效完成需求的能力&#xff0c;在各大社交媒体和科技论坛上引发了广泛的讨论。然而&#xff0c;在这场看似前…

LeetCode刷题记录:(13)N皇后(难题不难)

leetcode传送通道 传说中的N皇后&#xff0c;不难&#xff0c;进来了就看完吧 注释序号代表鄙人写代码的顺序和思考逻辑&#xff0c;供参考 class Solution {// 1.定义结果数组List<List<String>> result new ArrayList<>();public List<List<String&…