C++入门之基础语法

目录

一.关键字

二.命名空间

2.1命名空间域 

 2.2展开命名空间域 using namespace bit

使用using将命名空间中的某个成员引入 

2.3 头文件#include

2.3.1 头文件的展开和命名空间的展开区别

2.4 C++的标准的库命名空间std

2.5 命名空间的套娃

三. C++输入输出

3.1 流插入cout<<

3.2 C++换行endl

3.3 流提取cin>>  

四.缺省参数(默认参数)

4.1 全缺省

但是,实参只能从左往右传,不允许跳跃缺少

 4.2 半缺省 形参必须从右往左给(缺省),也不能跳跃

4.3 缺省的应用场景 

4.4 如果是在声明和定义分离的情况 

 规定:缺省值只能在声明部分给缺省值,不能同时给缺省值,否则会冲突。

五.函数的重载 

参数不同一:参数的类型不同

参数的不同二:参数的个数不同

参数的不同三:参数的顺序不同 

C++是如何实现重载的 


一.关键字

c++包含c语言的关键字,C++有63个,C语言有32个

二.命名空间

 在C语言里,如果出现定义两个名字相同的变量,或者定义一个和关键字相同的变量那么就会出现命名冲突。如:自己定义了一个变量rand,和C语言的关键字rand重复,所以会导致冲突。或者在同一个域里定义同一个变量也会导致冲突。

但是,如果是在不同的域里定义同一变量是可以的。

如下面代码,第一个输出的是局部变量x=1;第二个输出输出的是全局变量0;

这是因为这两个x不在一个作用域,第一个x是在main函数外部是全局变量,第二个x是在main函数里面是局部变量,他们的域不同,所以同名不会导致冲突。

如果要访问全局变量,那么就可以用域作用限定符 ::。

域作用限定符用法::

当限定符左部没有给东西时,默认代表访问全局变量,__::x.

当限定符左边给了作用域时,访问其作用域。

int x = 0;
int main()
{int x = 1;printf("%d\n",x);    //输出1printf("%d\n",::x);    //输出0
}

2.1命名空间域 

如果要在同一个域里定义同一个变量,如想在全员变量域里定义两个x。那么就需要命名空间域。

namespace (域名自己定义)

1. 全局域和局部域会影响生命周期,也会影响访问。

2. 命名空间域不会影响生命周期,只会影响访问。

3. 命名空间域,只能定义在全局。

4. 命名空间域,可以定义变量,结构体,函数,同样也需要指定作用域,命名空间也可以套命名空间。

编译器是先局部后全局 

访问命名空间域的变了,在域作用限定符的左部加上域名。就不用再进行先搜索局部,在搜索全局

namespace bit
{int x = 0;            //定义变量int add(int x,int y){}    //定义函数、}
namespace bit2 
{int x = 1;
}int main()
{printf(“%d\n”,bit::x);printf(“%d\n”,bit1::x);printf(“%d\n”,bit::add(1,2));}

特殊情况 

 对于定义结构体,需要在struct后面加域作用限定符。

struct bit1::node phead;

 2.2展开命名空间域 using namespace bit

如果不用using展开,那么在使用这个命名空间域里的变量时就需要用域作用限定符,指定作用域。

但是用using展开,就是相当于将命名空间域的权限放开,相当于将变量等的作用域开放到全局域,不需要::域作用限定符,也不会要指定命名空间。

 

using namespace bit;
int main()
{struct QNode node1;//不需要用::限定
}

使用using将命名空间中的某个成员引入 

using N::b;
int main()
{printf("%d\n",b);printf("%d\n",N::a);return 0; 
}

2.3 头文件#include<iostream>

2.3.1 头文件的展开和命名空间的展开区别

头文件的展开是应为编译器只会编译.c或者.cpp文件,所以要将头文件的内容拷贝到 .c或者.cpp文件,叫头文件的展开。

命名空间的展开的意思是:将命名空间的权限放开,让其内容相当于放入全局域,不用::限定符

2.4 C++的标准的库命名空间std

        若要用这个std空间域的东西,可以用两种方法。

        方法一:使用展开 using namespace std;//这个方法在实际开发中不推荐

        方法二:用::指定std的作用域。

        方法三: 只展开命名空间里的某几个变量,using std::count;

2.5 命名空间的套娃

例如如果在实际开发中,一个项目的代码全放在一个命名空间里如bit,那么难免会有函数,变量等充满,那么可以按名字子啊定义一个命名空间。

namespace bit
{namespace pyf{void push(){count<<"pyf"<<endl;}}namespace ls{void push(){count<<"ls"<<endl;}}
}int main()
{bit::pyf::push();bit::ls::push();
}

 在主函数里调用时,要用两次域作用限定符。

三. C++输入输出

1. <<单独使用是左移符,与C语言一样

2. 如果和cout一起使用,cout<< 是流插入

3.1 流插入cout<<

        C++可以自动识别类型的 

        如cout<<"hello world":就是将"hello world"流入控制台console

3.2 C++换行endl

        C++可以写\n,最好写endl

         cout<<"hello world"<<endl

3.3 流提取cin>>  

四.缺省参数(默认参数)

4.1 全缺省

在形参后面默认一个参数,在实参没有传参时有个默认值 

缺省参数的好处是,可以实参只传1个2个,或者不传

 

但是,实参只能从左往右传,不允许跳跃缺少

 不允许跳跃,如

 4.2 半缺省 形参必须从右往左给(缺省),也不能跳跃

 

4.3 缺省的应用场景 

一. 

我们知道顺序表C语言就需要遇到扩容问题,但是C语言是规定死的扩容一定的量,如扩容100个,但是只需要十个,那么就会导致90个空间浪费。

那么我们C++里面可以给参数n缺省一个值4(可以换其他),那么在入栈时,直接入多少空间的元素,那么就可以开辟多少空间。

 

4.4 如果是在声明和定义分离的情况 

 规定:缺省值只能在声明部分给缺省值,不能同时给缺省值,否则会冲突。

 

五.函数的重载 

C语言是不能出现同名函数的。

C++是允许同名函数的,但是不允许参数相同。

而且C++可以自动匹配参数类型。

参数不同一:参数的类型不同

参数的不同二:参数的个数不同

 

参数的不同三:参数的顺序不同 

C++是如何实现重载的 

C语言不支持重载的原因是:在链接这个阶段:使用函数名取寻找地址的,所以如果函数名相同,那么会区分不开。

C++:有一套函数名修饰规则,在名字中引入参数,那么就可以区分名字。 

 例如,下面两个同名函数

void f(int a,char b)
void f(char b,int a)

引入参数规则后:

call _Z1fic(?) //_Z1是默认的,f是函数名,ic是两个参数的类型的首字母缩写
call Z1fci(?)

 

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

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

相关文章

构建STM32MP133的Buildroot环境

意法半导体ST在坚持用 Yocto构建他们的OpenSTLinux MP1系列MCU&#xff0c;编译费劲&#xff0c;而且我们的应用不需要Yocto的环境&#xff0c;所以基于Buildroot的最小Linux系统更适合我们。 STM32MP133微处理器基于单Arm Cortex-A7内核&#xff0c;运行频率可达1 GHz&#x…

MSVS C# Matlab的混合编程系列2 - 构建一个复杂(含多个M文件)的动态库:

前言: 本节我们尝试将一个有很多函数和文件的Matlab算法文件集成到C#的项目里面。 本文缩语: MT = Matlab 问题提出: 1 我们有一个比较复杂的Matlab文件: 这个MATLAB的算法,写了很多的算法函数在其他的M文件里面,这样,前面博客的方法就不够用了。会报错: 解决办法如下…

CC工具箱使用指南:【复制字段】

一、简介 这个工具的目的将一个图层的多个字段批量复制到另一个图层中。 假定这样一个场景&#xff0c;手头有一个要素1&#xff0c;要素里有10个字段&#xff0c;另一个要素2&#xff0c;除了shape_area等图形字段外&#xff0c;没有其它字段。 现在的需求是&#xff0c;想…

大模型学习与实践笔记(十一)

一、使用OpenCompass 对模型进行测评 1.环境安装&#xff1a; git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . 当github超时无法访问时&#xff0c;可以在原命令基础上加上地址&#xff1a; https://mirror.ghproxy.com git clon…

Redis 面试题 | 04.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基础架构即代码 | 亚马逊如何在现实生活中实践 DevOps

当我在 2005 年作为开发人员加入亚马逊时&#xff08;那时 Amazon Web Services 还不存在&#xff09;&#xff0c;我从公司领了一个传呼机&#xff08;如图 1 所示&#xff09;。在亚马逊&#xff0c;开发人员不仅要设计实现一个具体的服务&#xff0c;还要负责这个服务的部署…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地&#xff0c;将预制体作为AB包资源&#xff0c;不仅需要对预制体本身进行归类&#xff0c;还要对其涉及的动画&#xff08;AnimationClip&#xff09;、动画状态机&#xff08;AnimatorController&#xff09;、以及所…

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…

【51单片机】外部中断

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第16章 及17章 1、硬件 2、软件 #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit led P2^0; sbit key3 P3^2;//外部中断…

IS-IS:01 ISIS基本配置

这是实验拓扑&#xff0c;下面是基本配置&#xff1a; R1: sys sysname R1 user-interface console 0 idle-timeout 0 0 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 user-interface console 0 idle-timeout 0 0 int loop 0 ip add …

webserver 之 线程同步 线程池(半同步半反应堆)

目录 &#x1f402;前言 &#x1f351;B / S 模型 &#x1f418;线程同步机制 &#x1f33c;概念 &#xff08;1&#xff09;RAII &#xff08;2&#xff09;信号量 &#xff08;3&#xff09;互斥量 &#xff08;4&#xff09;条件变量 &#x1f33c;功能 &#xf…

GIS项目实战08:JetBrains IntelliJ IDEA 2022 激活

为什么选择 IntelliJ IDEA 使用编码辅助功能更快地编写高质量代码&#xff0c;这些功能可在您键入时搜索可能的错误并提供改进建议&#xff0c;同时无缝地向您介绍编码、新语言功能等方面的社区最佳实践。 IntelliJ IDEA 了解您的代码&#xff0c;并利用这些知识通过在每种上…