C++基础入门

前言:哈喽小伙伴们,从这篇文章开始,博主将开启新篇章的讲解——C++语言,那么C++是一门怎么样的语言呢???它的语法又是怎么样的呢???这篇文章将给你一一解答。


目录

一.C++是什么

二.C++关键字

三.命名空间

 四.C++输入/输出

五.缺省参数

六.函数重载

七.引用

 八.内联函数

九.auto关键字

十.基于范围的for循环

十一.指针空值nullptr

总结


一.C++是什么

C++是在祖师爷本贾尼·斯特劳斯特卢普 的带领下,在C语言的基础上,对C语言进行各种各样的优化设计,最终所诞生的一门新型的计算机编程语言。

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

C++完全兼容C语言这意味着一个C++文件可以完全用C语言来写,但是C语言文件却写不了C++的独特语法,在后边的讲解中,我们会时不时的将这两种语言进行对比。


二.C++关键字

 C++中有很多关键字都来自于C语言,同时也有部分关键字是C++所独有的,这些关键字我们在这里不做过多解释,重要的关键字后边都会一一讲到。


三.命名空间

我们知道在C语言中,在同一个域内不能定义两个相同名字的变量

比如说我们定义了两个全局变量a,它们都处于全局域中,就会报出重定义的错误

但是在不同的域中却可以定义相同名字的变量

并且会根据就近原则来输出变量。

但是在C++中,存在一个命名空间的概念,可以让两个同名变量处在同一作用域中

 

如上图所示,命名空间的创建需要使用关键字namespace,我们在全局域中建立了两个命名空间,并分别命名为a1、a2,它们两个都存放名为a的变量

想要使用这两个变量,需要用到域作用限定符“::”在其前边加上命名空间的名字,便可访问对应命名空间中的变量了。

如果不使用域作用限定符,则默认只会在局部域搜索,局部域没有则搜索全局域

值得注意的是,存放的命名空间中的变量虽然定义在全局域,但是如果不使用域作用限定符,是无法对其进行调用的

除了变量之外,函数,结构体等等都可以在命名空间中定义。

值得注意的是,当两个命名空间同名时,并不会发生冲突,而是会将它们合并。如果合并之后存在同名的变量,则会报错。 

但是命名空间也会存在一些问题,如下:

如果我们的命名空间中同时有很多个变量都需要被访问,那么我们需要不断地使用域作用限定符,这样就会显得有些繁琐,所以我们可以通过如下代码:

using namespace 命名空间名;

将命名空间按照类似于头文件的使用方法展开,这样命名空间中的变量就又变成全局变量了,不会收到命名空间的限制

当然,我们也可以选择仅将命名空间中的若干个变量展开

将命名空间展开虽然方便,但无疑可能又会导致命名冲突所以不建议在很大的域中使用,仅建议在一个小域中图方便使用

命名空间也可以嵌套使用:

要注意的是域作用限定符也需要嵌套使用。 


 四.C++输入/输出

cout<<        流输出       

cin>>          流输入

想要使用它们需要使用头文件#include<iostream>,以及展开C++的标准库命名空间std

using namespace std;

C++的输入输出可以摆脱格式化的输入输出方式

 能够看出cin和cout的输入输出不需要%d、%c等格式化方式能够自动识别类型

但是我们发现这么多变量的输出之间都没有间隔,这是因为cout的输出默认都是连着的,所以我们需要自己添加间隔


五.缺省参数

我们先来看一段代码:

#include<iostream>
using namespace std;
int add(int x = 1, int y = 2)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int sum1 = add(a, b);
	int sum2 = add();
	cout << sum1 << endl;
	cout << sum2 << endl;
	return 0;
}

能够看到,以前在C语言中,add函数的形参我们都是没有初始化过的,但是在C++中,函数的参数都是可以初始化的,像这样初始化形式参数的函数,就叫做缺省函数

sum1对应的函数有实际参数,而sum2对应的函数没有实际参数,它们的结果分别是什么呢??

能够看出,初始化了实际参数的sum1的结果为30,而未初始化实际参数的sum2的结果为3

这能够说明,如果缺省函数有实参,则会将实参带入,反之则带入形参

我们也可以在有多个参数的情况下,只传若干个实际参数

这样也默认只会接收一个实参

上述函数的两个形参我们都进行了初始化,这样的函数称为全缺省函数,当然也存在半缺省函数,也就是函数的部分形参初始化,但是没有初始化的参数必须靠左:

#include<iostream>
using namespace std;
int add(int x, int y = 2)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int sum1 = add(a, b);
	int sum2= add(a);
	cout << sum1 << endl;
	cout << sum2 << endl;
	return 0;
}

如上代码,半缺省函数我们只能让x不初始化,而不能将x初始化而y不初始化,因为实参的传入默认是从左向右的,所以如果y不初始化且没有实参传入时,就会报错了


六.函数重载

在C语言中,同样不能存在同名的函数,但是在C++中,我们仍然可以实现,这就叫函数重载

那么在C++中,函数重载的条件是什么呢???

  • 参数类型不同
  • 参数数量不同
  • 参数顺序不同

 以上展示的函数重载方式均可以实现。


七.引用

所谓引用,又叫起别名,就是给一个变量起一个新的名字

类型& 新名 = 原名

给变量a起一个别名b,当a改变时,b也随之改变,说明两者就是一个变量的不同名字。 

这样能够看出,引用在C++中就相当于是C语言的指针

我们知道,在swap交换函数中,如果想要实现两个参数值的真正交换,需要传参数的地址并用指针去接收

但是在C++中,我们可以直接用别名做形参

这样的写法比指针简单的多,需要顾虑的细节也少了。

在使用引用时,我们需要注意以下三点:

  • 引用必须初始化(别名必须有主)
  • 引用定义后,不能改变指向(一个别名不能被多个人使用)
  • 一个变量可以有多个引用(一个人可以有多个别名)

虽然引用比指针好用,但是它并不能完全取代指针,因为它不能改变指向,所以对于链表,二叉树的操作就无法完成。 


 八.内联函数

我们知道,在C语言中,某些简单的函数可以使用写宏函数来代替,这是因为宏函数的使用不需要创建函数栈帧能够加快代码的效率。但是宏函数同时也有很多缺点,比如宏不方便调试,代码的可读性差,可维护性差等等。

而在C++中,存在内联函数的定义,能够在保证函数形式不变的前提下,达到宏函数不创建栈帧而加快代码效率的效果,这需要使用到关键字inline

#include<iostream>
using namespace std;
inline int add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 10;
	int b = 20;
	int sum = add(a, b);
	cout <<"sum = "<< sum << endl;
	return 0;
}

内联函数的作用和宏一样,都是将函数内的代码替换函数的调用,这就存在着和宏一样的问题:

函数的代码过多以及函数的调用次数过多就会导致整体代码量过大,从而加重代码效率等等,所以内联函数虽然优化了一些宏函数的问题,但同时我们也不能将所有的函数都当做内联函数来使用


九.auto关键字

auto称为自动识别类型关键字用auto定义的变量能够自动识别其所访问的变量的类型作为自己的类型

    int a = 10;
    auto b = a;

如上述代码,用auto定义的变量b访int型变量a,则变量b的也行即为int

但是单纯的这样写好像也没有什么大用处,实际上这样确实没有用处,但是如果变量b要访问的是一个函数指针类型

void(pf*)(void,void);

这种类型的书写过于复杂,所以我们就可以使用auto:

int add(int x, int y)
{
    return x + y;
}

auto b = add(x,y);


十.基于范围的for循环

在C++中,for循环有一种新的用法,如果我们已知要循环的范围大小,就可以用一种新的方式来进行迭代循环,这里以数组为例,因为对数组而言,其范围是确定的

其中int是数组类型e是作为一个临时拷贝参数来拷贝数组的元素并打印。 这样的for循环写法能够不断进行迭代,将数组元素赋值给e,并自动判断结束


十一.指针空值nullptr

在C语言中,如果要将一个指针置空,我们知道要使用NULL,但是在C++中,NULL在底层代码中被宏替换为了0,也就是说在C++中,NULL实际上就是0

而在C++中如果要将指针置空,需要使用新的关键字nullptr


总结

关于C++的入门基础知识到这里就分享完啦,希望能够对刚刚学习C++的小伙伴们有所帮助。

喜欢博主文章的小伙伴们记得一键三连哦,我们下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云部署配置幻兽帕鲁Palworld服务器教程

阿里云作为国内领先的云计算服务提供商&#xff0c;为企业和个人提供了丰富的云服务。最近幻兽帕鲁这款游戏挺火&#xff0c;阿里云为游戏开发者和玩家提供了一种高效、便捷的方式来部署配置幻兽帕鲁Palworld联机服务器&#xff0c;无需手动部署配置&#xff0c;3分钟即可完成幻…

Java笔记 --- 四、异常

四、异常 Java.lang.Throwable Error Exception&#xff08;异常&#xff09; 异常的作用 异常的处理方式 JVM默认的处理方式 捕获异常&#xff08;自己处理&#xff09; try里面没有出现异常&#xff0c;就不会运行catch里面的代码 如果出现多个异常&#xff0c;需要多个c…

【PyQt】01-PyQt下载

文章目录 前言静态库 一、PyQt是什么&#xff1f;二、安装1.Windows环境下安装安装PyQt5Designer 2.Liunx环境下安装 总结 前言 拜吾师 PyQt5 快速入门 静态库 补充一点知识&#xff1a; Windows&#xff1a; .lib Linux: .a .so(动态库) 简单描述PyQt就是python调用C的Qt文…

【超简版,代码可用!】【0基础Python爬虫入门——下载歌曲/视频】

安装第三方模块— requests 完成图片操作后输入&#xff1a;pip install requests 科普&#xff1a; get:公开数据 post:加密 &#xff0c;个人信息 进入某音乐网页&#xff0c;打开开发者工具F12 选择网络&#xff0c;再选择—>媒体——>获取URL【先完成刷新页面】 科…

2024年人工智能产业十大发展趋势

2024年人工智能产业十大发展趋势 技术变革1. 多模态预训练大模型将是人工智能产业的标配2. 高质量数据愈发稀缺将倒逼数据智能飞跃3. 智能算力无处不在的计算新范式加速实现 应用创新4. 人工智能生成内容&#xff08;AIGC&#xff09;应用向全场景渗透5. 人工智能驱动科学研究&…

Vscode配置python代码开发

文章目录 1. 配置python运行环境2. 常用插件说明3. Vscode配置文件说明3.1 setting.json配置说明3.2 launch.json配置说明 4. 远程开发5. 其他配置 1. 配置python运行环境 安装python插件&#xff1a;点击VSCode左侧边栏中的扩展图标&#xff08;或按 CtrlShiftX&#xff09;&a…

nodejs学习计划--(七)express框架

express框架 1. express介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB …

osgEarth真HelloWorld

osgEarth真HelloWorld vcpkg installtests vcpkg install osgEarth安装指南 https://docs.osgearth.org/en/latest/install.html&#xff0c; 预先设置ports/osg/portfile.cmake GL3 否则调用osg相关功能时会出现如下提示 OpenSceneGraph does not define OSG_GL3_AVAILABLE; …

【2024-01-27可用】NVM安装太慢,镜像地址失效

安装nvm时&#xff0c; Could not retrieve https://registry.npm.taobao.org/latest/SHASUMS256.txt. 解决如下 ### 具体配置 安装路径 root: D:\Program Files\nvm path: D:\Program Files\nodejs镜像地址 node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror:…

基于ncurse的floppy_bird小游戏

1. 需求分析 将运动分解为鸟的垂直运动和杆的左右运动。 2. 概要设计 2.1 鸟运动部分 2.2 杆的运动 3. 代码实现 #include <stdio.h> #include <ncurses.h>#include <stdlib.h> #include <time.h>int vx 0; int vy 1;int bird_r; int bird_c;int…

高考复习技巧考研资料、美赛论文及代码,数据收集网站(初高中招生考试全科试卷等)

图&#xff0c;就要从“点、线、面的位置关系”这一内核开始发散&#xff0c;第一层级为彼此的位置关系&#xff0c;平行、相交、异面&#xff08;两直线间位置&#xff09;、垂直&#xff08;相交或异面中的特殊位置&#xff09;&#xff0c;多面体、旋转体等&#xff0c;然后…

【Java与网络6】实现一个自己的HTTP浏览器

前面我们讨论了HTTP协议的基本结构和Socket编程的基本原理&#xff0c;本文我们来整个大活&#xff1a;自己实现一个简单的浏览器。 目录 1.主线程循环体 2.readHostAndPort()方法的实现 3.readHttpRequest()方法的实现 4.sendHttpRequest()方法的实现 5.readHttpRespons…

由两个有限项的等差数列B, C, 求有多少个有限项的等差数列A,满足C是A, B的所有公共项,若有无穷个A满足条件,输出-1

题目 思路: #include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back const int maxn = 1e6 + 5, inf = 1e9 + 5, maxm = 4e4 + 5, mod = 1e9 + 7, N = 1e6; // int a[maxn], b[maxn]; int n, m; string s;int qpow(int a, int b){…

Android P 屏保和休眠相关知识

Android P添加屏保功能&#xff0c;如果休眠时间设定大于屏保时间&#xff0c;则先进入屏保&#xff0c;达到休眠时间后再进入休眠 需求&#xff1a; 添加屏幕互保开关&#xff0c;默认关闭。只保留时钟&#xff0c;可设定指针和数字、夜间模式。启用时间改多长时间无操作进入…

Microsoft Visual Studio 2022的安装与使用

1 软件介绍 Microsoft Visual Studio 2022是Microsoft Visual Studio软件的一个高版本&#xff0c;能够编写和执行C/C代码&#xff0c;具有强大的功能&#xff0c;是开发C/C程序的主流软件。 Microsoft Visual Studio 2022有三个版本&#xff0c;分别是社区版&#xff08;Commu…

ACDSee 2024旗舰版 下载安装汉化教程,ACDSee 最新版,附安装包和工具,全网最简单,轻松搞的安装,无套路

前言 ACDSee是一款数字资产管理、图片管理编辑工具软件&#xff0c;提供良好的操作界面&#xff0c;简单人性化的操作方式&#xff0c;优质的快速图形解码方式&#xff0c;支持丰富的RAW格式&#xff0c;强大的图形文件管理功能等。 准备工作 1、提前准备好 ACDSee 2024 安装…

手把手教你优雅的安装虚拟机 Ubuntu —— 图文并茂

目录 Ubuntu 获取Vmware 安装新建虚拟机Ubuntu 安装虚拟机工具安装更多内容 本文教你如何优雅的在虚拟机中安装 Ubuntu&#xff0c;图文并茂、包教包会&#xff01; Ubuntu 获取 Ubuntu 官网镜像下载速度较慢&#xff0c;建议从国内镜像网站下载&#xff0c;如网易、中科大、…

针对于vue element-plus组件的el-date-picker日期区间组件的日期格式问题以及如何进行区间判断

<template><el-date-picker v-model"value1" type"daterange" range-separator"To" start-placeholder"开始日期" end-placeholder"结束日期" :size"size" change"sarend" /> </templat…

【网站项目】基于SSM的231论文投稿系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

《合成孔径雷达成像算法与实现》Figure5.19

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …