邯郸网站设计申请/吉安seo

邯郸网站设计申请,吉安seo,做外国人的生意哪家网站好,做网站上线一般要多久目录 一.C的第一个程序 二.命名空间(namespace) 1.命名空间的定义与使用: (1)命名空间里可以定义变量,函数,结构体等多种类型 (2)命名空间调用(&#xf…

目录

一.C++的第一个程序

二.命名空间(namespace)

1.命名空间的定义与使用:

(1)命名空间里可以定义变量,函数,结构体等多种类型

(2)命名空间调用(::)与展开

(3)命名空间的嵌套

(4)具体使用场景

三.缺省参数

1.基本定义:

2.几个注意:

四.函数重载

1.定义与使用:

五.引用

1.定义:

2.引用的特性:

3.引用的使用(区别传值返回和传引用返回):

4.const引用:

六.inline内联


一.C++的第一个程序

C++作为C语言的升级版,除了可以无缝兼容C语言的各种语法结构和各种框架外,在很大程度上对C语言的许多代码进行了优化升级,在保持原有代码逻辑结构相同的情况下,C++的简便性和应用性相比C语言不可同日而语,以下我要阐述的就是在学完C语言然后进入C++后需要掌握的一些基础知识首先来看第一个C++程序

#include<iostream>//C++需要包含的头文件
using namespace std;//展开对应的命名空间
int main()
{cout << "hello world" << endl;//区别于C语言的输出方式
//cout<<输出内容,后面的endl是换行(endline),但和C语言里面的\n不用,endl是一个函数。return 0;
}

基础结构大概就是这样,下面就是对每一部分的具体介绍:

二.命名空间(namespace)

1.命名空间的定义与使用:

书面上的定义简而言之是:namespace的本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量

(1)命名空间里可以定义变量,函数,结构体等多种类型
#include<iostream>
namespace space
{
//定义变量int rand = 10;char time = 20;
//定义函数int add(int a, int b){return a + b;}
//定义结构体struct student{char name[20];char sex[6];int age;};
}
int main()
{return 0;
}
(2)命名空间调用(::)与展开

 在调用的时候,只要用空间名::函数名这样的格式来调用

#include<iostream>
int main()
{std::cout << "hello world" << std::endl;return 0;
}

 也可以只展开一个命名空间中的某个变量或函数,这样的话访问这个变量或函数就更简便

#include<iostream>
using namespace std;
namespace b
{int test(int x, int y){return x + y;}
}
using b::test;
int main()
{int m = test(1, 5);cout << m;return 0;
}
(3)命名空间的嵌套
#include<iostream>
using namespace std;
namespace a
{int test(int x, int y){return x + y;}namespace b{int test(int x, int y){return x * y;}}}
int main()
{int m = a::test(2, 3);int n = a::b::test(2, 3);cout << m << " " << n;return 0;
}
(4)具体使用场景
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数” printf("%d\n", rand);return 0;
}

这样写c语言会报错:报错的原因就是我们自己定的变量rand和C语言自带的库函数冲突了,这时候编译器就无法识别,这其实是C语言的不足之处。而c++中的命名空间就完美的解决这个问题

三.缺省参数

1.基本定义:

在函数定义时为参数指定的默认值,当调用函数时如果没有传递该参数,则使用默认值。这样可以提高函数的灵活性和可重用性
举例例如一个计算面积的函数,参数有长和宽,其中宽可以设为默认值1,这样调用时只传长就可以得到正方形的面积,这样的例子比较直观

#include<iostream>
using namespace std;
int test(int x = 2, int y = 6)
{return x + y;
}
//如果调用这个函数但是不传递参数,那么返回结果就是8,同样如果掺入参数1和2,那么返回结果就是3

2.几个注意:

(1)缺省参数必须从右往左给,比如上面的程序,我们只给x缺省参数但不给y缺省参数这样其实是不合法的  

(2)函数实参一定是从左往右给函数的

(3)函数声明和定义分离时,不能在声明和定义中同时给缺省值

#include<iostream>
using namespace std;int test(int x = 1, int y = 2);
int main()
{int a = test();cout << a;return 0;
}
int test(int x = 1, int y = 2)
{return x + y;
}
//比如这样同时个给缺省值的函数是不合法的,一般只在声明中给缺省值

四.函数重载

1.定义与使用:

即重名函数可以通过识别传入的参数类型来自动选择相对应的函数,例如:

#include<iostream>
using namespace std;int test(int x , int y )
{return x + y;
}
double test(double x, double y)
{return x + y;
}
int main()
{double x = 1.5, y = 2.8;int a = test(1,2);double b = test(x, y);cout << a <<" "<< b ;return 0;
}

五.引用

1.定义:

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间,但实际上在C++的底层逻辑里引用依旧是以指针的形式存在,但我们在实际使用中并不需要考虑那么多,就当引用是C++给我们带来的一种更加方便写代码的方法就行了,以下是引用使用的基本规则:

类型& 引用别名=引用对象

#include<iostream>
using namespace std;
int main()
{int a = 30;//一个变量可以取多个别名int& b = a;//给a变量取别名int& c = a;//c也是a的别名int& d = b;//给b变量取别名,相当于d也是a的别名cout << &a << endl << &b << endl << &c << endl << &d << endl;//从地址中也可以看出来a,b,c,d占用同一块内存空间return 0;}

当然,引用相对指针是非常方便好理解的,我举个例子:

#include<iostream>
using namespace std;
//传址调用,指针
void swap(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
//引用
void swap(int& a, int& b)//函数重载
{int tmp = a;a = b;b = tmp;
}
int main()
{int a = 10;int b = 20;swap(a, b);swap(a, b);return 0;
}

2.引用的特性:

(1)引用必须在定义时初始化。比如int& a=0;这句代码其实是不合法的

(在 C++ 中,引用必须在定义时初始化,这意味着当声明一个引用变量时,必须立即将其绑定到一个已存在的对象(变量、常量或表达式的结果),与普通变量不同,普通变量可以在后续赋值时初始化)

(2)一个变量可以有多个引用

(3)引用一旦引用一个实体,再不能引用其他实体

举个栗子:

#include<iostream>
using namespace std;int main()
{int a = 10;int& b = a;int c = 20;b = c;cout << &a <<" "<< &b <<" "<< &c << endl;cout << a <<" "<< b <<" "<< c << endl;return 0;
}
//这里进行了b=c的操作,只是把c的值赋值给了b,但并没有改变b的引用实体,因此a和b地址是相同的

3.引用的使用(区别传值返回和传引用返回):

引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被 引用对象

引用传参介绍过了,然后我们看一下引用做返回值(即传引用返回)与传值返回区别

int STTop(ST& rs)//注意这里是传值返回(因为返回类型是int二百元引用类型的int&)
{assert(rs.top > 0);return rs.a[rs.top];
}
int main()
{ST st1;STInit(st1);STPush(st1, 1);//入栈STPush(st1, 2);STTop(st1)+=10;return 0;
}

截取了一部分之前栈的操作,发现对于STTop(st1)+=10;这个操作无法达到目的,

我们本意想的是让栈顶的数据加上10,但是实际上栈顶的数据并没有改变     

这是因为这串代码返回的是一个值,相当于我们把原来的数拷贝出了他的值然后返回了,

因此就算把这份拷贝的值加上10也无法改变原来的栈顶数据

以上发生的情况就是由传值引用引发的,传值引用简而言之就是为了保护源数据不被修改的场景二存在,通过返回对栈顶元素的值的拷贝,从而使实际上的栈顶元素不受改变

但如果代码这样改,就可以轻易改变栈顶元素的值:

(即传引用返回)

int& STTop(ST& rs)
{assert(rs.top > 0);return rs.a[rs.top];
}
int main()
{ST st1;STInit(st1);STPush(st1, 1);STPush(st1, 2);STTop(st1)+=10;return 0;
}

4.const引用:

const引用简而言之就是对引用范围的缩小:即  const对象必须用const引用,普通对象也可以用const引用,但普通引用引用不了const对象

#include<iostream>
using namespace std;
int main()
{const int a = 10;//只可读//int& b = a;//发生错误,b可读可写,权限变大//应加上const const int& b = a;int c = 20;const int& d = c;//权限缩小,可以c++;//d++不可以;c可以改变,d不可以return 0;
}

 这些就涉及到权限的问题,普通对象是一个变量,可以被改变的,所以他的权限更低。而const对象不能被改变所以他的权限更高。普通引用引用const对象权限就放大了,所以编译器会报错,反过来const引用可以引用普通对象,因为权限是可以缩小的,总结来说:访问权限可以缩小,但是不能放大(访问权限只针对引用和指针)

六.inline内联

在 C++ 中,内联函数(Inline Functions)是一种优化机制,旨在通过在编译时将函数体直接替换到调用位置,减少函数调用的开销(如栈帧压入/弹出、参数传递等)

#include<iostream>
using namespace std;
inline int add(int x,int y)
{return x + y;
}
int main()
{cout << add(1, 5) << endl;return 0;
}

对于短小的函数,inline操作会使函数在编译时展开,可以提高效率。但是如果这个函数过长就不适合使用内联了,过长的函数内联反而会降低时间,因此,内联函数也并不是万能的

    还有一点非常值得注意,就是内联函数的定义和声明必须在同一个文件

欧克了,C++的入门知识大概就是这些了,相比C语言,还是由很多需要管制与在意的地方,那就先这样吧

全文终

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

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

相关文章

Python的学习篇(七)--网页结构

七、网页&#xff08;HTML&#xff09;结构 7.1 HTML介绍 HTML(Hyper Text Markup Language)&#xff0c;超文本标记语言。 超文本&#xff1a;比文本的功能要强大&#xff0c;通过链接和交互式的方式来组织与呈现信息的文本形式。不仅仅有文本&#xff0c;还可以包含图片、…

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势

*VulnHub-FristiLeaks:1.3暴力解法、细节解法&#xff0c;主打软硬都吃&#xff0c;隧道搭建、寻找exp、提权、只要你想没有做不到的姿势 一、信息收集 1、扫靶机ip 经典第一步&#xff0c;扫一下靶机ip arp-scan -l 扫描同网段 nmap -sP 192.168.122.0/242、指纹扫描、端口…

【Python 数据结构 9.树】

我装作漠视一切&#xff0c;其实我在乎的太多&#xff0c;但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合&#xff0c;n0时为空树。当n大于0的时候&#xff0c;满足如下两个条件&#xff1a; ① 有且仅有一个特定的结点&#xff…

pyqt联合designer的运用和设置

PyQt Designer 简介 PyQt Designer 是一个用于创建和设计 PyQt 应用程序用户界面的可视化工具。它允许用户通过拖放方式添加和排列各种控件,如按钮、文本框、滑块等,并设置它们的属性和样式,从而快速构建出美观且功能完整的 UI 界面。 Windows版本:【免费】安装包别管啊啊…

纯html文件实现目录和文档关联

目录结构 效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>项目结题报告</title><style lang"scss">::-webkit-scrollbar {width: 6px;height: 6px;}::-webkit-scro…

MongoDB winx64 msi包安装详细教程

首先我们可以从官网上选择对应版本和对应的包类型进行安装&#xff1a; 下载地址&#xff1a;Download MongoDB Community Server | MongoDB 这里可以根据自己的需求&#xff0c; 这里我选择的是8.0.5 msi的版本&#xff0c;采用的传统装软件的方式安装。无需配置命令。 下载…

如何借助 ArcGIS Pro 高效统计基站 10km 范围内的村庄数量?

在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术在各个领域都发挥着重要作用。 特别是在通信行业&#xff0c;对于基站周边覆盖范围内的地理信息分析&#xff0c;能够帮助我们更好地进行网络规划、资源分配以及市场分析等工作。 今天&#xff0c;就…

【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手

目录 一、前言 二、WPS接入AI工具优势​​​​​​​ 三、WPS接入AI工具两种方式 3.1 手动配置的方式 3.2 Office AI助手 四、WPS手动配置方式接入AI大模型 4.1 安装VBA插件 4.1.1 下载VBA插件并安装 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果测试 4.5 配置模板文…

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

Mysql5.7-yum安装和更改mysql数据存放路径-2020年记录

记录下官网里用yum rpm源安装mysql, 1 官网下载rpm https://dev.mysql.com/downloads/repo/yum/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html&#xff08;附官网操作手册&#xff09; wget https://repo.mysql.com//mysql80-community-release…

HTML5(Web前端开发笔记第一期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 三件套标签标题标签段落标签文本格式化标签图像标签超链接标签锚点链接默认链接地址 音频标签视频标签 HTML基本骨架综合案例->个人简介列表表格表单input标签单选框radio上传…

Oracle19c进入EM Express(Oracle企业管理器)详细步骤

以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express&#xff08;EM Express&#xff09;的详细步骤&#xff1a; ### **步骤 1&#xff1a;确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…

JSAR 基础 1.2.1 基础概念_空间小程序

JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明&#xff0c;官网之前的文档准备废除了&#xff0c;基于xsml的开发将退出历史舞台&#xff0c;three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…

JavaWeb-servlet6中重定向、转发、cookie、session、文件上传和下载

请求重定向 一个 web 资源收到客户端请求后&#xff0c;通知客户端去访问另外一个 web 资源&#xff0c;这称之为请求重定向。 使用response对象提供的sendRedirect()方法&#xff0c;可以将网页重定向到另一个页面。SendRedirect()方法的语法格式&#xff1a; response.send…

信息安全访问控制、抗攻击技术、安全体系和评估(高软42)

系列文章目录 信息安全访问控制、抗攻击技术、安全体系和评估 文章目录 系列文章目录前言一、信息安全技术1.访问控制2.抗攻击技术 二、欺骗技术1.ARP欺骗2.DNS欺骗3.IP欺骗 三、抗攻击技术1.端口扫描2.强化TCP/IP堆栈 四、保证体系和评估1.保证体系2.安全风险管理 五、真题在…

mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算

今天正好有空&#xff0c;来讲个之前粉丝经常问的一个知识&#xff0c;就是mysql的Innodb最大支持的索引长度是多少&#xff1f;以及索引长度怎么计算&#xff1f; 一、mysql的innodb引擎&#xff0c;创建索引最大支持的长度是多少字节&#xff1f; 不墨迹&#xff0c;直接说…

SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释

1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…

C++修炼之路:初识C++

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …

【STM32MP157系统移植】3.TF-A目录结构

bl1&#xff1a;部分一般不用TFA自带的&#xff0c;而是芯片内部的BOOTROM bl2&#xff1a;更像传统意义的TF-A&#xff0c;TF-A本身 bl31&#xff1a;是ARMV&#xff18;的EL3运行时固件 bl32&#xff1a;OPTEE或者TF-A提供的sp_min bl33&#xff1a;就是uboot 真正需要移…

OpenCV连续数字识别—可运行验证

前言 ​ 文章开始&#xff0c;瞎说一点其他的东西&#xff0c;真的是很离谱&#xff0c;找了至少两三个小时&#xff0c;就一个简单的需求&#xff1a; 1、利用OpenCV 在Windows进行抓图 2、利用OpenCV 进行连续数字的检测。 3、使用C&#xff0c;Qt 3、将检测的结果显示出来 …