C++入门基础

目录

一、命名空间

1.命名空间的作用

2.命名空间的定义 

3.命名空间的使用

二、输入输出

1.输出运算符<<

 2.输入运算符>>

三、缺省参数

四、函数重载

五、引用

1.引用简介

2.引用的注意事项

3.const引用

4.引用与指针的关系

六、inline


一、命名空间

1.命名空间的作用

c++语法是在c语言的不足之上的弥补,其中命名空间就是一个。

如下:

        我们在定义变量或写函数声明时对变量所命的名称可能在某些头文件中被定义过,导致语法错误,这是难以避免的。或者在做项目时需要把多个人写的代码整合在一起,那么各个人之间可能用同样的名称去定义变量,很容易导致重定义问题。所以c++引入了命名空间的概念。

2.命名空间的定义 

        定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等
        namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,因为域名就可以区分它们。
        C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。
        namespace只能定义在全局,当然他还可以嵌套定义
        项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。
         C++标准库都放在⼀个叫std(standard)的命名空间中。

3.命名空间的使用

要得到命名空间的某个成员变量只需要以下格式

                命名空间的名字 :: 成员名

使用using可以把命名空间展开,即成员变量不在受命名空间域的限制,可以直接访问。using还可以对某个成员变量展开。具体示例如下:

二、输入输出

1.输出运算符<<

c++的输入输出通常用cin,cout,例如输出Hello world

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

<<是一个运算符重载(就是一个运算符可以表示多个意思),<<也可以表示位运算。

        左操作数:ostream对象

        右操作数:需要打印的内容

        返回值:ostream对象

        结合方向:自左向右

<<可以自动识别数据类型,不需要向printf一样显示的表示。如下:

#include<iostream>
int main()
{int a=10;std::cout<<a;return 0;
}

endl的作用之一是换行在这里可加可不加。

当然运算符<<是无法完成printf的某些功能的,还需两着相互配合使用。

 2.输入运算符>>

>>也是一个运算符重载(就是一个运算符可以表示多个意思),>>也可以表示位运算。

        左操作数:istream对象

        右操作数:需要输入的变量

        返回值:istream对象

        结合方向:自左向右

>>可以自动识别数据类型,不需要向scanf一样显示的表示。如下:

#include<iostream>
int main()
{int a=0;std::cin>>a;return 0;
}

同样运算符>>是无法完成scanf的某些功能的,还需两着相互配合使用。

为了方便我们还可以把命名空间给展开,如下:

#include<iostream>
using namespace std;
int main()
{int a=0;cin>>a;return 0;
}

三、缺省参数

        在写函数形参的时候我们可以添加一个缺省值,这样在使用这个函数的时候即使不传参也能调用它会使用缺省值来代替实参。如下:

#include<iostream>
int add(int a=0,b=1)//0为a的缺省值,1为b的缺省值。
{return a+b;
}
int main()
{add();add(1);//这里的1传给的是第一个形参,即aadd(1,2);return 0;
}

add()的这三种调用方式都是合法的。

缺省参数分为全缺省和半缺省参数。(缺省参数也叫默认参数)
        全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值
        带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。
        函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

四、函数重载

        函数重载就是使用相同的函数名写多个函数实现不同的功能,这个在c语言语法上是不允许的,但在C++上是可以的,但要求要有能够区分它们的形参。如:

#include<iostream>
int add(int a,int b)
{return a+b;
}
double add(double a,double b)
{return a+b;
}
int main()
{int c=add(12,5);double d=add(1.2,3.6);return 0;   
}

        这里虽然写了两个函数名相同的函数,但编译器可以根据所传参数联系来区分应该调用哪一个函数,所以是合法的,这就是函数重载。 

        重载函数的参数可以做一下设置(1).参数类型不同(2).参数个数不同(3).参数类型顺序不同
 

        在这里fu(2)是合法的,编译器知道要调用第一个fu,而fu()则是不合法,因为编译器无法知道要调用哪一个fu,所以函数重载最核心的问题还是通过控制参数来让编译器来识别需要调用哪一个函数, 注意编译器只看参数,去控制返回值类型没有用

五、引用

1.引用简介

初学引用我们可以把它理解为别名,它的作用和指针差不多这是引用更方便而已。

引用格式:

类型& 引⽤别名 = 引⽤对象;
如下:

#include<iostream>
int main()
{int a=6;int& p=a;return 0;
}

        引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时改变被引⽤对象。
        引⽤传参跟指针传参功能是类似的,引⽤传参相对更⽅便⼀些。
        引⽤和指针在实践中相辅相成,功能有重叠性,但是各有特点,互相不可替代。

2.引用的注意事项

  • 引⽤在定义时必须初始化
  • ⼀个变量可以有多个引⽤
  • 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体

3.const引用

        在引用一个const对象时一定也要用const修饰,如果不用const修饰就属于权限放大问题(本来const修饰的变量不能被修改而引用没有用const修饰即可以被修改,权限放大),不符合语法。

        需要注意的是类似 int& rb = a*3; double d = 12.34; int& rd = d; 这样⼀些场景下a*3的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。最核心的就是在引用对象时权限可以被缩小但不能被放大

        所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,C++中把这个未命名对象叫做临时对象。

4.引用与指针的关系

  • 语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
  • 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
  • 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
  • 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
  • sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)
  • 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。

六、inline

        (1).inline修饰的函数称为内联函数,它的作用是把被修饰的函数直接展开而不用去建立函数栈针。有点类似宏函数的效果,它的设计目的就是为了替代宏函数,因为宏函数在处理的时候需要注意的详解太多了,很容易出错。

内联函数的定义,示例如下:

        (2).inline对于编译器⽽⾔只是⼀个建议,也就是说,就算是加了inline编译器也可以选择在调⽤的地⽅不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。inline适⽤于频繁调⽤的短⼩函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。
        (3).vs编译器debug版本下⾯默认是不展开inline的,这样⽅便调试,debug版本想展开需要单独的做设置。
        (4).inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。

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

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

相关文章

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持&#xff0c;‌上电即可使用的语音识别系统。‌它的应用场合相对单一&#xff0c;‌主要适用于智能家电、‌语音遥控器、‌智能玩具等&#xff0c;‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

【总结】nginx源码编译安装报错./configure: error: SSL modules require the OpenSSL library.

问题现象 源码编译安装nginx时&#xff0c;执行./configure …… --with-http_ssl_module 命令安装https模块&#xff0c;需要用到openssl&#xff0c;由于机器缺少openssl库&#xff0c;报如下错误。 …… checking for openat(), fstatat() ... found checking for getaddr…

3、宠物商店智能合约实战(truffle智能合约项目实战)

3、宠物商店智能合约实战&#xff08;truffle智能合约项目实战&#xff09; 1-宠物商店环境搭建、运行2-webjs与宠物逻辑实现3-领养智能合约初始化4-宠物领养实现5-更新宠物领养状态 1-宠物商店环境搭建、运行 https://www.trufflesuite.com/boxes/pet-shop 这个还是不行 或者…

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师&#xff0c;必须要掌握应用开发技能吗&#xff1f;搞工程肯定是必须要会界面开发&#xff0c;QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例&#xff0c;搭建应用开发环境&#xff0c;演示深度学习模型的QT应用案例。 开发…

数学建模~~~SPSS相关和回归分析

目录 1.双变量相关分析 1.1理论基础 1.2简单散点图的绘制介绍 1.3相关性分析 1.4分析相关性结果 2.简单线性回归分析 2.1简单概括 2.2分析过程 2.3结果分析 3.曲线回归分析 3.1问题介绍 3.2分析过程 3.3结果分析 1.双变量相关分析 1.1理论基础 双变量相关分析并不…

关于Linux的面试题(实时更新中~)

一、软连接和硬连接的区别&#xff1a; 软连接创建方式 ln -s 被链接文件 链接文件 &#xff08;1&#xff09;软链接是一个链接文件&#xff1b; &#xff08;2&#xff09;软链接有着自己的 inode 号&#xff08;文件编号&#xff09;&#xff1b; &#xff08;3&#…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

最新CSM客户成功 OKR 案例:以指导、激励和调整您的团队

客户是任何企业的命脉&#xff0c;而客户服务是与客户接触的第一站&#xff0c;是实现目标和扩大组织规模是以保留客户和追加销售为前提的。 客户成功CSM是一种商业方法&#xff0c;确保客户在使用你的产品/服务时达到他们想要的结果。客户成功是以关系为中心的客户管理&#…

实战篇(十):使用Processing创建可爱花朵:实现随机位置、大小和颜色的花朵

使用Processing创建可爱花朵 0.效果预览1. 引言2. 设置Processing环境3. 创建花朵类4. 实现花瓣绘制5. 绘制可爱的笑脸6. 鼠标点击生成花朵7. 完整代码8. 总结与扩展0.效果预览 在本教程中,我们将使用Processing编程语言来创建一个可爱的花朵生成器。通过封装花朵为一个类,并…

最小化研发过程质量管理,质量与效率之间的平衡

前言 是不是流程约束越多&#xff0c;效率越低&#xff1f;不然&#xff0c;如果因为缺了流程约束&#xff0c;而搞砸了质量&#xff0c;那么一切都将归零。 所以找到一套适合自身的研发过程质量管理方式&#xff0c;在质量与效率之间趋向平衡是每个研发团队所必须要考虑的事…

Adobe Premiere Pro(Pr)安装包软件下载

一、简介 Adobe Premiere Pro&#xff08;简称Pr&#xff09;是由Adobe公司开发的一款功能强大的视频编辑软件。它支持多平台使用&#xff0c;包括Windows和Mac系统&#xff0c;并且拥有良好的兼容性和高效的性能。Premiere Pro不仅提供了视频剪辑、特效添加、音频处理等基本功…

go语言Gin框架的学习路线(七)

GORM入门(基于七米老师) 目录 GORM入门 安装 连接数据库 连接MySQL 连接PostgreSQL 连接Sqlite3 连接SQL Server 我们搞一个连接MySQL的例子 创建数据库 GORM操作MySQL GORM是一个流行的Go语言ORM&#xff08;对象关系映射&#xff09;库&#xff0c;它提供了一种方…

Haproxy服务

目录 一.haproxy介绍 1.主要特点和功能 2.haproxy 调度算法 3.haproxy 与nginx 和lvs的区别 二.安装 haproxy 服务 1. yum安装 2.第三方rpm 安装 3.编译安装haproxy 三.配置文件详解 1.官方地址配置文件官方帮助文档 2.HAProxy 的配置文件haproxy.cfg由两大部分组成&…

IAR环境下STM32+IAP方案的实现

--基于STM32F103ZET6的UART通讯实现 一、什么是IAP&#xff0c;为什么要IAP IAP即为In Application Programming(在应用中编程)&#xff0c;一般情况下&#xff0c;以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了&#xff0c;如果在设备使…

【C++】 string类的模拟实现

目录 一、我们先创建三个文件分别为 String.h&#xff08;声明&#xff09;、String.cpp&#xff08;定义&#xff09;、teat.cpp&#xff08;测试&#xff09; 二、成员函数 构造函数与析构函数 &#x1f31f;string() &#x1f31f;string(const char* str) &#x1f…

YOLO 模型基础入门及官方示例演示

文章目录 Github官网简介模式数据集Python 环境Conda 环境Docker 环境部署 CPU 版本官方 CLI 示例官方 Python 示例 任务目标检测姿势估计图像分类 Ultralytics HUB视频流示例 Github https://github.com/ultralytics/ultralytics 官网 https://docs.ultralytics.com/zhhttp…

python-网络并发模型

3. 网络并发模型 3.1 网络并发模型概述 什么是网络并发 在实际工作中&#xff0c;一个服务端程序往往要应对多个客户端同时发起访问的情况。如果让服务端程序能够更好的同时满足更多客户端网络请求的情形&#xff0c;这就是并发网络模型。 循环网络模型问题 循环网络模型只能…

跨平台WPF音乐商店应用程序

目录 一 简介 二 设计思路 三 源码 一 简介 支持在线检索音乐&#xff0c;支持实时浏览当前收藏的音乐及音乐数据的持久化。 二 设计思路 采用MVVM架构&#xff0c;前后端分离&#xff0c;子界面弹出始终位于主界面的中心。 三 源码 视窗引导启动源码&#xff1a; namesp…

知名在线市场 Etsy 允许在其平台上销售 AI 艺术品,但有条件限制|TodayAI

近日&#xff0c;以手工和复古商品著称的在线市场 Etsy 宣布&#xff0c;将允许在其平台上销售 AI 生成的艺术品。这一举措引发了广泛关注和争议。尽管 Etsy 正在接受 AI 艺术的潮流&#xff0c;但平台对这一类商品的销售设置了一些限制。 根据 Etsy 新发布的政策&#xff0c;…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图&#xff1a;STC8H8K64URA8889开发板&#xff0c;使用P2口I2C接口&#xff1a; 2.实物连…