C++入门基本语法(1)

news2024/11/16 21:41:31

一、命名空间namespace

定义变量、函数时,定义的名称可能会和头文件中或者自己重复使用的名称冲突;namespace可以对标识符的名称进行本地化,以避免冲突的问题;

## 例如:

 

## 出现这种问题的原因:

(1)在头文件stdlib里面使用了rand,并且还是一个指针类型的,这与我们自己在全局定义的rand名称冲突;当然把rand定义在main函数里面不会冲突,这是因为就近原则,会先在局部寻找;

(2)若是在同一个作用域定义两个名称相同的变量,也会冲突;

使用namespace可以解决这种问题;

1、namespace定义

(1)namespace是一种关键字,后面跟上命名空间的名称,这个名称是我们自己命名的,然后接上{},{}里面是空间的成员,成员可以是变量、函数、或者自定义类型(如:结构体),{}后面不用像结构体那样接上分号 ' ; '  ;

(2) namespace本质上是一个域,这个域定义在全局域里面,这个域相当于一堵墙,把域里面的成员包起来,不同的域里面可以起相同名称的不同变量,成员名称如何起不受外面的影响,避免了冲突;

(3)namespace只能定义在全局,可以嵌套定义;

(4)有两个或者多个名称相同的命名空间namespace是允许的,此时它们会自动合并;

(5)命名空间里面的成员变量的生命周期不会因为命名空间的存在而改变,里面的成员变量的生命周期还是在程序完成时结束;不像局部变量,在那个所在的函数结束后生命周期就结束了;

(6)C++标准库都放在名称为 std 的namespace中。

2、代码演示:

1(::作用域限定符):

对比上面的代码,这段代码定义了一个命名空间space1,把我们自己想定义的rand定义在里面,这个rand就不会和头文件中的指针类型的rand冲突;

使用命名空间要用域作用限定符 :: ,这个符号前面加上域的名称表示在这个域之下进行使用;当前面不接名称时,就是默认在全局之下查找;

例如:

第一个打印的是3,它是就近原则查找局部;第二个是在全局;第三个在space1域里面;

2(嵌套定义、同名定义)

 首先命名空间不能定义在局部,必须定义在全局域;

 嵌套定义:

namespace space3
{
	int a = 9;

	struct S
	{
		char c;
	};

	namespace space4
	{
		int b = 0;
	}

}
int main()
{
	printf("%d\n", space3::a);

	printf("%d\n", space3::space4::b);

	struct space3::S s;
	s.c = 'x';
	printf("%c\n", s.c);
	return 0;
}

嵌套定义使用时要从最外面的命名空间开找起;

在命名空间里面定义一个结构体变量,使用时在结构体名称前面加上 命名空间名称(space3)和域作用限定符( :: ),无论命名空间嵌套了几次,使用结构体时,把struct放在最前面;

同名定义命名空间:

在头文件中:

在源文件中:

运行结果:


二、命名空间的使用

使用到 using 展开一个命名空间,方便进行访问namespace里面的成员变量;

1、using使用的三种场景:

具体有三种展开方式:

(1)不展开:使用域作用限定符去指定访问命名空间里面的变量;这种方式在大型项目里面频繁使用,也最安全;

(2)使用using展开命名空间中某一个变量,后续使用这个变量时不需要再用 :: 域作用限定符;使用这种方式时需要保证这个成员变量名在程序中产生冲突;

(3)把命名空间全部展开,在平时代码量较少时使用这种方式,方便后续对命名空间内变量的访问;

2、代码演示:

 using展开一般写在全局域,这里只是为了方便演示;

展开某一个成员时,在using后面接上命名空间的名称和 :: 以及那个成员的名称,以分号结尾;

 直接展开整个命名空间:

在using后面接上namespace和命名空间名称,以分号结尾;


 三、输入输出

<iostream>是Input Output Stream的缩写,是标准的输入、输出流库,定义了标准的输入输出对象;

<<是流插入运算符,>>是流提取运算符;

cout、cin、endl都放在一个叫std(standard)的命名空间里面,所以在使用的时候要展开这个命名空间;

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main()
{
	int a = 0;
	double b = 0.1;
	char c = 'x';
	cout << a << ' ' << b << ' ' << c << endl;
	//虽然已经展开,但是这样写可以;在没有展开时,必须在前面加上std::
	std::cout << a << ' ' << b << ' ' << c << std::endl;

	//cout和cin可以自动识别类型
	cin >> a;
	cin >> b >> c;
	cout << a << ' ' << b << ' ' << c << endl;
	return 0;
}

 关于<<和cout搭配、>>和cin搭配;

就拿<<和cout来说:<<是流插入运算符,那么就说明要插入数据进入流,既然是插入数据,那么说明数据已经定好值了,此时就是输出;同时<<也是指向cout的,说明要把数据传到流;

>>是流提取运算符,说明要从流里面提取一个数值,那么说明变量的数值没有定好值,>>指向的是变量,那么要在控制台输入一个数值,传给>>指向的变量,对应的就是输入;


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

1、缺省参数定义:

缺省参数是在函数声明或者定义时,给函数指定一个缺省值,若是没有指定实参,则使用缺省值,否则使用实参;缺省参数分为全缺省和半缺省参数(缺省参数也叫默认参数)

全缺省就是形参全部设置一个缺省值;半缺省就是部分给缺省值;设置缺省值的时候规定从右往左设置,不能间隔或者跳跃设置;

调用带缺省值的函数时,函数传参从最左边开始传实参,传实参也不能跳跃或者间隔传入;

若是函数声明和函数定义不在一起,使用缺省参数时,缺省参数不能同时出在在函数声明和函数定义中,规定给在函数声明中;

2、代码演示:

全缺省:

 在传参时若是跳跃传参会报错:

 半缺省:

 没有默认参数的位置必须要传入实参;

设置缺省参数时不按照从右往左顺序:


 五、函数重载

一、定义:

C++支持在同一作用域定义同名的函数,这就是函数重载;

但是要满足条件:

(1)函数名称相同;

(2)同名函数的形参个数或者类型不同;

这样C++出现了多态的行为,使用起来也更加灵活;C不支持函数重载;

另外:函数的返回类型不同不能作为判断两个函数是否重载的条件;必须依靠形参来判断。

二、代码演示:

1、类型不同

2、个数不同:

 3、当缺省参数出现在函数重载的情况下时,传参不正确系统会报错:

 此时不知道调用哪个函数,因为第二个函数定义的形参c是缺省参数,此时调用哪个都可以,此时为了避免错误只有在把实参写完整,之后编译器才会知道要调用第二个函数;

这种情况的两个函数同样还是函数重载。

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

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

相关文章

MySQL系列之--详细安装教程和启动方法

文章目录 安装教程打开或关闭方式方式1&#xff1a;方式2&#xff1a; 客户端连接方式客户端连接方式1&#xff1a;客户端连接方式2&#xff1a;MySQL环境变量的配置 安装教程 1、mysql官网下载最新的符合本系统的版本 2、点击.msi文件进入安装页面 选择默认的选项开发者安…

品味食家巷蛋奶酪饼,感受西北美食魅力

在广袤的西北大地&#xff0c;美食的丰富多样令人叹为观止。而食家巷蛋奶酪饼&#xff0c;宛如一颗璀璨的明珠&#xff0c;散发着独特的魅力。 这款蛋奶酪饼&#xff0c;是传统工艺与现代口味的完美融合。而当你继续品尝&#xff0c;鸡蛋的鲜嫩和奶酪的浓郁醇厚便会在口中交融…

跟《经济学人》学英文:2024年08月03日这期 GPT, Claude, Llama? How to tell which AI model is best

GPT, Claude, Llama? How to tell which AI model is best Beware model-makers marking their own homework 原文&#xff1a; When Meta, the parent company of Facebook, announced its latest open- source large language model (LLM) on July 23rd, it claimed that…

vue2 使用 tinymce富文本编辑器

注意&#xff1a; 在vue2中使用tinymce有版本限制的&#xff0c;最新版都是支持v3的&#xff0c;官方也说明了&#xff1b; vue2中不能使用tinymce/tinymce-vue 为4以上的版本&#xff1b; 使用步骤&#xff1a; 1、vue项目中安装 tinymce&#xff1b; npm install tinymce5.…

用TensorFlow训练自己的第一个模型

现在学AI的一个优势就是&#xff1a;前人栽树后人乘凉&#xff0c;很多资料都已完善&#xff0c;而且有很多很棒的开源作品可以学习&#xff0c;感谢大佬们 项目 项目源码地址 视频教程地址 我在大佬的基础上基于此模型还加上了根据特征值缓存进行快速识别的方法&#xff0c;…

【教程】Python语言的地球科学常见数据——全球大气再分析数据

a、多年数据的读取 b、趋势分析 c、多时间尺度统计。 ECMWF 中心推出的 ERA5 全球大气再分析数据提供了大量大气、陆地和海洋气候变量的逐小时数据。这些数据在 30km 网格上覆盖了全球&#xff0c;在时间跨度上从 1979 至今。该数据能够提供全球范围的格点气象数据。 将针对该…

react-native从入门到实战系列教程一Switch组件和StatusBar的运用

跨平台通用的组件。这是一个受控组件&#xff0c;你必须使用onValueChange回调来更新value属性以响应用户的操作。如果不更新value属性&#xff0c;组件只会按一开始给定的value值来渲染且保持不变&#xff0c;看上去就像完全点不动。 实现效果 代码实现 import {View, Text,…

力扣hot100-二叉树

文章目录 概要二叉树的基本概念常见的二叉树类型常用的二叉树遍历二叉树的常用技巧 题目&#xff1a;二叉树的中序遍历方法1--递归遍历方法2--使用栈 概要 二叉树&#xff08;Binary Tree&#xff09;是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;…

DC-2靶机试试看 继续打靶!!冲冲冲!!

要更改一下自己的host&#xff0c;这样才可以正确的访问我们的靶机的页面。 下面看看我的思路吧&#xff1a; 前面还是老样子&#xff0c;先发现靶机的ip地址以及收集他开放了哪些端口等等的信息 查看相对应的cms 我用了一些msf的模块没有打下来这个站点 收集相关的信息&…

【计算机人接私活】手把手教你上手挖到第一个漏洞,从底薪3k到月入过万,只有一步之遥!

计算机人想接靠谱的私活&#xff1f;看这篇&#xff01; 暑假想做兼职赚生活费&#xff1f;看这篇&#xff01; 挖漏洞找不到门路&#xff1f;看这篇&#xff01; 挖漏洞必备工具 Up入行网安多年&#xff0c;一直在探索副业项目。 从最初的月薪5k&#xff0c;到现在一个漏…

[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-01 以太网协议介绍

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

SpringBoot 3的两种SPI加载方式

从spring boot 2.7.0发布后&#xff0c; 自动配置类的加载方式就发生了改变&#xff0c;原来从META-INF/spring.factories文件中加载&#xff0c;变为了从META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中加载&#xff0c;对应的加载实…

Ubuntu下python3.12安装, 分布式 LLM 推理 exo 安装调试过程, 运行自己的 AI 集群

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” —调试有点废,文章有点长,希望大家用心看完,肯定能学废,感谢. 1. Ubuntu下python3.12安装 1.1 导入 Python 的稳定版 PPA,不用编译 sudo add-apt-repository ppa:deadsnakes/ppa sudo…

82.WEB渗透测试-信息收集-框架组件识别利用(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;81.WEB渗透测试-信息收集-框架组件识别利用&#xff08;5&#xff09; log4j/log4j2&…

《Excelize权威指南》新书发布

在数据洪流涌动的数字化时代&#xff0c;数据处理与分析已跃升为解锁无限洞察力的金钥匙&#xff0c;赋能商业智慧、重塑医疗健康版图、驱动教育科研创新。然而&#xff0c;当数据量级爆炸式增长&#xff0c;传统工具如 Excel 虽被誉为数据处理领域的常青树&#xff0c;其手动操…

modelsim仿真quartus IP

开发环境&#xff1a;quartus prime pro 20&#xff1b;modelsim se-64 10.6d 1. 生成Altera的IP库 使用quartus生成IP库&#xff0c;需要使用Simulation Library Compiler&#xff08;Tools->Launch Simulation Library Compiler&#xff09; 如下图操作&#xff0c;选择…

车载音频开发(一):从看懂wav开始

背景介绍&#xff1a;随着电车的发展势头迅猛&#xff0c;国内车载音频也成为电车火热宣称的势头&#xff0c;要想深入了解车载音频&#xff0c;那首先还是得从最为普通的音频文件WAV开始。 我们都知道&#xff0c;计算机只能存储数字&#xff0c;声音确实靠不同频率的波组成&a…

RabbitMQ的快速入门

目录 前言 1. 安装RabbitMQ 2.基本结构 3. RabbitMQ消息模型 ​​​​​​4. 入门案例 4.1 publisher实现 4.2 consumer实现 4.3 总结 前言 RabbitMQ是一套开源&#xff08;MPL&#xff09;的消息队列服务软件&#xff0c;是由 LShift 提供的一个 Advanced Message Q…

达梦数据库的系统视图v$cachesql

达梦数据库的系统视图v$cachesql 达梦数据库的系统视图V$CACHESQL的主要作用是提供缓冲区中SQL语句的信息&#xff0c;在 ini 参数 USE_PLN_POOL !0 时才统计。通过查询这个视图&#xff0c;用户可以了解SQL语句在缓冲区中的执行情况&#xff0c;包括SQL节点的类型、进入次数、…