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

news2024/11/17 13:47:01

一、 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.coloradmin.cn/o/1538012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新能源汽车BMS应用设计

新能源汽车BMS应用设计 电池管理系统&#xff08;BMS&#xff09; 概述 电池管理系统&#xff08;BMS&#xff09;为一套保护动力电池使用安全的控制系统&#xff0c;时刻监控电池的使用状态&#xff0c;通过必要措施缓解电池组的不一致性&#xff0c;为新能源车辆的使用安全…

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 &#xff0c;加上 google()mavenCentral() 重新编译试一下

RuoYi 自定义字典列表页面编码翻译

“字典数据”单独维护&#xff0c;而不是使用系统自带的字典表&#xff0c;应该如何使用这样的字典信息呢&#xff1f; 系统字典的使用&#xff0c;请参考&#xff1a; 《RuoYi列表页面字典翻译的实现》 https://blog.csdn.net/lxyoucan/article/details/136877238 需求说明…

案例精选 | 新疆科技学院下一代智慧安全运营中心建设项目

新疆科技学院&#xff0c;是新疆维吾尔自治区人民政府举办的全日制普通本科高校。学校始建于2002年&#xff0c;前身为新疆财经大学商务学院&#xff0c;2019年12月经教育部批准转设为新疆科技学院。学校分为东、西两个校区&#xff0c;总占地面积3070亩&#xff0c;开设24个本…

在Windows中安装wsl2和ubuntu22.04

目录 一、概述二、安装wsl22.1 虚拟化设置2.2 虚拟化设置2.3 切换和更新wsl2 三、安装ubuntu3.1 下载Ubuntu22.043.2 配置Ubuntu22.04 一、概述 wsl2是一种面向Windows操作系统的虚拟化技术&#xff0c;可以让我们在Windows操作系统中“丝滑”的运行Linux系统。wsl2由微软团队…

VScode手动安装vsix格式插件,提示安装插件与code版本不兼容问题

问题描述: vscode手动按装插件提示"插件不兼容code版本 原因方案:修改安装包内的package.json文件中的版本号与vscode版本号对应即可 解决步骤 以(adpyke.codesnap-1.3.4.vsix)安装包为例 手动安装vscode弹出 无法安装扩展“adpyke.codesnap-1.3.4”&#xff0c;它与 …

BRICK POP展示了有趣的链上游戏玩法与奖励

新游戏BRICK POP将Sui区块链技术与低Gas费用&#xff0c;以及我们在Web3游戏开发方面的专业知识无缝结合。通过充分利用Sui和我们自己的INNO平台的优势&#xff0c;BRICK POP为玩家提供了一个融合了前沿技术和引人入胜游戏的沉浸式游戏体验。BRICK POP游戏设计为实时交易和高用…

三级数据库技术知识点(详解!!!)

1、从功能角度数据库应用系统可以划分为表示层、业务逻辑层、数据访问层、数据持久层四个层次&#xff0c;其中负责向表示层直接传送数据的是业务逻辑层。 【解析】表示层负责所有与用户交互的功能;业务逻辑层负责根据业务逻辑需要将表示层获取的数据进行组织后&#xff0c;传…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

后端程序员入门react笔记(九)- react 插件使用

setState setState引起的react的状态是异步的。操作完毕setState之后如果直接取值&#xff0c;可能取不到最新的值&#xff0c;我们举个例子console.log(this.state.num)打印的值&#xff0c;总是上一次的值而不是最新的。 import React, {Component} from react; class Ap…

Day41:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

目录 ASP-默认安装-MDB数据库泄漏下载 ASP-中间件-CVE&短文件&解析&写权限 HTTP.SYS&#xff08;CVE-2015-1635&#xff09;主要用作蓝屏破坏&#xff0c;跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 ASP-SQL注入-SQLMAP使用…

Java安全 反序列化(5) CC6链原理分析

Java安全 反序列化(5) CC6链原理分析 CC6学习的目的在于其可以无视jdk版本&#xff0c;这条链子更像CC1-LazyMap和URLDNS链子的缝合版 文章目录 Java安全 反序列化(5) CC6链原理分析前言一.CC6的原理和实现以及易错点我们如何实现调用LazyMap.get()方法一个易错点 二.完整CC6P…

Kafka 3.x(上)

具体课程请看课程简介_哔哩哔哩_bilibili 概念 分布式流处理平台&#xff0c;它以高吞吐量和可扩展性而闻名。相同类型的消息存在于Topic主题中&#xff0c;主题类似于数据库中的表&#xff0c;不过主题存储的数据大多是半结构化的。主题可以包含多个分区&#xff08;分布式的…

Flink:维表 Join 难点和技术方案汇总

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

Vue模块化开发步骤—遇到的问题—解决办法

目录 1.npm install webpack -g 2.npm install -g vue/cli-init 3.初始化vue项目 4.启动vue项目 Vscode初建Vue时几个需要注意的问题-CSDN博客 1.npm install webpack -g 全局安装webpack 直接命令提示符运行改指令会报错&#xff0c;operation not permitted 注意&#…

软件推荐 篇三十七:开源免费无广告的在线音乐免费播放 | MusicFree纯净无广告体验-小众冷门推荐

引言 自从QQ音乐没了杰伦、某云开始收费&#xff0c;除了各种广告弹窗导致电脑卡的要死&#xff0c;打工人就靠这点音乐背景熬夜了&#xff0c;木有办法&#xff0c;得有个开源免费的听歌软件吧&#xff0c;一搜github&#xff0c;软件一大堆&#xff0c;作为一个打工仔&#…

python--for循环

for循环&#xff1a; python中的for循环是用来迭代容器中的每一个元素的&#xff0c;而不是c,java中理解那个循环&#xff1b; for 零时变量 in 容器&#xff1a; print&#xff08;零时变量&#xff09; #每一个迭代出的元素 range 全局函数&#xff1a; …

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Saltstack 最大打开文件数问题之奇怪的 8192

哈喽大家好&#xff0c;我是咸鱼。 今天分享一个在压测过程中遇到的问题&#xff0c;当时排查这个问题费了我们好大的劲&#xff0c;所以我觉得有必要写一篇文章来记录一下。 问题出现 周末在进行压测的时候&#xff0c;测试和开发的同事反映压测有问题&#xff0c;请求打到…

在 Linux/Ubuntu/Debian 上安装 SQL Server 2019

Microsoft 为 Linux 发行版&#xff08;包括 Ubuntu&#xff09;提供 SQL Server。 以下是有关如何执行此操作的基本指南&#xff1a; 注册 Microsoft Ubuntu 存储库并添加公共存储库 GPG 密钥&#xff1a; sudo wget -qO- https://packages.microsoft.com/keys/microsoft.as…