初步接触C++

news2024/11/17 10:36:28

hello,各位小伙伴,本篇文章跟大家一起学习C++,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 !

文章目录

  • 初步区别C语言和C++
  • 命名空间
    • 1.命名空间的定义
    • 2.命名空间的使用
  • C++的输入输出
  • 缺省参数
    • 1.缺省参数的概念
    • 2.缺省参数的分类

初步区别C语言和C++

对于之前学的C语言,C++的关键字接近是C语言的2倍,C++对于C语言有兼容性,所以在C++里有些关键字和语法和C语言是一样的。C++就是C语言的升级版,解决了C语言中的一些比较麻烦的问题。

C++关键字总计63个,C语言32个

命名空间

命名空间的存在就是为了避免变量、函数以及后面会学的类的名称发生冲突,所以出现了关键字namespace

这些变量、函数和类的名称将都存在于全局作用域中

举个冲突的例子

#include <stdio.h>
#include <stdlib.h>
int rand = 10;//rand是存在于函数库中的一个函数
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:“rand”: 重定义;以前的定义是“函数”

1.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
在一个命名空间(Namespace)里的成员可以是变量、函数、类、结构体等

例如:

namespace Pakho//Pakho是命名空间的名字,可以自己随便取
{
	int rand = 10;//将上述的问题就这样解决了,这里的rand不再是函数

	int Add(int x,int y)//函数
	{
		return x + y;
	}

	struct Node//结构体
	{
		struct Node* next;
		int data;
	};
}

命名空间也可以嵌套:

namespace Pakho
{
	int Add(int x,int y)//函数
	{
		return x + y;
	}

	namespace Sherry
	{
		struct Node//结构体
		{
		struct Node* next;
		int data;
		};
	}
}

要注意:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
例如,下面的两个Pakho会被合并成同一个命名空间

namespace Pakho
{
	int Add(int x,int y)//函数
	{
		return x + y;
	}
}
namespace Pakho
{
	struct Node//结构体
	{
		struct Node* next;
		int data;
	};
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

2.命名空间的使用

怎么使用命名空间了的成员呢?
例如:

namespace Pakho
{
	int rand = 10;

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

	struct Node
	{
		struct Node* next;
		int data;
	};
}

int main()
{
	//编译器会报错,Add和rand为未声明的标识符(无法识别Add和rand)
	res = Add(1,rand);
	printf("res = %d\n",res);
	return 0;
}

命名空间的使用有三种方式:

在C++编程语言中,:: 是作用域解析运算符的符号。在C++中,:: 用于访问命名空间、类、结构体或枚举类型中的成员。

1.加命名空间名称及作用域限定符:

int main()
{
	printf("rand = %d\n",Pakho::rand);
	//rand属于命名空间Pakho
	return 0;
}

2.使用using将命名空间中某个成员引:

using Pakho::rand;
//使用命名空间中的rand
int main()
{
	printf("rand = %d\n",rand);
	return 0;
}

3.使用using namespace 命名空间名称 引入:

using namespace Pakho;
//使用命名空间Pakho
int main()
{
	printf("rand = %d\n",rand);
	return 0;
}

所以即使变量、函数和类的名称发生冲突,只要将他们分装在不同的命名空间,就解决了这个问题,如:

namespace Pakho
{
	int Add(int x,int y)
	{
		return x + y;
	}
}
namespace Sherry
{
	int Add(int x,int y)
	{
		return x + y + 10;
	}
}

int main()
{
	int res1 = Pakho::Add(1,2);
	int res2 = Sherry::Add(1,2);
	printf("res1 = %d\n",res1);
	printf("res2 = %d\n",res2);
	return 0;
}

C++的输入输出

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
	int a = 0;
	cin>>a;
	cout<<"Hello world!!!"<<endl;
	return 0;
}

cin是C++中的输入(标准输出对象(控制台)),cout是C++中的输出(和cin标准输入对象(键盘)),在使用时必须要必须包含头文件<iostream>头文件并且按命名空间的使用方法使用std
所以也可以这样写:

#include<iostream>

int main()
{
	int a = 0;
	std::cin>>a;
	std::cout<<"Hello world!!!"<<endl;
	return 0;
}

一般日常练习推荐使用using namespace std

endl:是特殊的C++符号,表示换行输出,包含在包含<iostream>头文件中。
<<是流插入运算符,>>是流提取运算符。
相比于C语言的sacnfprintf,C++的输入输出可以自动识别变量类型,不需要像C语言一样手动控制格式。

缺省参数

1.缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

例如:

int Add(int x = 5,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add();//当没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

打印结果为res1 = 15,res2 = 2。

2.缺省参数的分类

全缺省参数:

int Add(int x = 5,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add();//当没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

半缺省参数:

int Add(int x,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add(5);//当y没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

要注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
    例如:
int Add(int x = 10,int y)//这样写是错误的
{
	return x + y;
}

int main()
{
	int res1 = Add(,5);//这样写是错误的
	return 0;
}
  1. 缺省参数不能在函数声明和定义中同时出现
    例如:
int Add(int x,int y = 10);
int Add(int x,int y = 20)
{
	return x + y;
}
//如果生命与定义位置同时出现,恰巧两个位置提供的值不同,
//编译器无法确定是使用哪个缺省值
  1. 缺省值必须是常量或者全局变量
  2. C语言不支持(编译器不支持)

好啦,本章对于C++的学习就先到这里,如果有什么问题,还请指教指教,希望本篇文章能够对你有所帮助,我们下一篇见!!!

如你喜欢,点点赞就是对我的支持,感谢感谢!!!
在这里插入图片描述

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

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

相关文章

Nacos 配置管理-应用于分布式系统

** Nacos 配置管理-应用于分布式系统 ** 目录&#xff1a; 一、Nacos 配置管理-应用于分布式系统-微服务创建 1.1 发布配置 ( nacos-1.1.3 ) 1.2 打开 idea 创建一个父 Maven 工程 nacos_config 工程&#xff0c;和两个子模块&#xff08;service1, service2 &#xff09;…

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置&#xff1a;my.cnf3. 开机自启动设置&#xff08;可选设置&#xff09;4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

基于matlab仿真A*算法的多目标路径规划问题

资源文件换一下 剩下的看注释即可 很详细的哦 % 定义地图大小 十行十列 ROWS 10; COLS 10;% % 初始化地图 % grid zeros(ROWS, COLS); % % 设置固定位置的障碍物 % obstacle_positions [2, 3; 4, 5; 6, 7;]; % 障碍物位置坐标 % % 将障碍物位置设置为1 % for i 1:size(o…

数据库备份工具(实现数据定时覆盖)

数据库备份工具&#xff08;实现数据定时覆盖&#xff09; 永远热爱&#xff0c;永远执着&#xff01; 工具介绍 自动化测试数据库更新调度程序 这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务…

【网络安全技术】——Kali Linux环境部署

&#x1f4d6; 前言&#xff1a;Kali 是一个基于 Debian 的 Linux 发行版。它的目标就是为了简单&#xff1a;在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这个目标。大多数做安全测试的开源工具都被囊括在内。 目录 &#x1f552; 1. Kali Linux下载与安装…

latex在写算法`\For` 和 `\EndFor` 以及 `FOR` 和 `\ENDFOR` ,报错Undefined control sequence.

这里写目录标题 1. 错误原因2. 进行改正3. 爱思唯尔期刊与施普林格期刊对于算法的格式不太一样&#xff0c;不能直接套用总结 1. 错误原因 我在算法中使用\For&#xff0c;\EndFor 2. 进行改正 换成FOR&#xff0c;\ENDFOR 3. 爱思唯尔期刊与施普林格期刊对于算法的格式不太…

构建以太网交换网络——(生成树实验)

实验介绍 关于本实验 以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路&#xff0c;引发广播风暴以及MAC地址表不稳定等故障现象&#xff0c;从而导致用户通信质量较差&#xff0c;甚至…

图论06-飞地的数量(Java)

6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边界。 返回网格中 无法…

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

javaWeb医院在线挂号系统

功能描述 医院挂号系统主要用于实现医院的挂号&#xff0c;前台基本功能包括&#xff1a;用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括&#xff1a;系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如下&…

舵机烧录

舵机烧录 一、硬件连接1、准备物资2、连接&#xff08;1&#xff09;舵机线一侧连接舵机控制板&#xff0c;另一侧连接舵机&#xff08;2&#xff09;老安卓线一侧连接舵机控制板&#xff0c;一侧连接电脑&#xff08;3&#xff09;接上低压电池 二、软件使用1、打开舵机烧录软…

抖音小店月入三五万?真有这么赚钱吗?

大家好&#xff0c;我是电商糖果 在网上我们经常看到这样的帖子&#xff0c;或者视频博主说他自己在抖音开小店做副业。 收入比主业还高&#xff0c;一个月好几万。 很多人都说骗人的&#xff0c;要是赚钱这么容易&#xff0c;我不早成富一代了。 糖果是做电商的&#xff0…

electron 打包生成的latest.yml文件名字变成xxx.yml文件名

正常情况是electron每次打包会生成一个latest.yml文件和一个xxx.exe文件&#xff0c;但是当version的名字修改成 这样 后面添加了-beta &#xff0c;然后生成的文件名字就变成了 beta.yml 更改方法&#xff1a; 在build配置底下添加 "detectUpdateChannel": false…

产品经理方法论——MRD文档模板】

一、 文档格式 无要求 二、文档类型 PPT 三、文档框架 1. 市场说明 市场规模&#xff1a;市场规模决定最终的利润。我们对于直接产生现金流的产品通过交易额衡量市场规模&#xff0c;如果是间接产生现金流的产品我们通过用户量衡量市场规模。市场增速&#xff1a;随着时间…

独享IP可以避免被封禁或限制访问的风险

在一些网站或服务中&#xff0c;存在对共享IP的封禁或限制访问的情况&#xff0c;这给用户带来了不便。而使用独享IP可以有效规避这一问题&#xff0c;保障用户正常访问需求。例如&#xff0c;在进行搜索引擎优化、社交媒体营销或广告投放时&#xff0c;独享IP可以确保用户的网…

spring-boot-starter-validation

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 编写程序Controller接口时,对于参数的验证非常重要,但是多个参数时,如…

刷题之贪心3

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这篇文章将给大家介绍贪心算法和贪心算法题目的练习和解析&#xff0c;贪心算法的本质就是每一个阶段都是局部最优&#xff0c;从而实现全局最优。加上这篇文章一共有30道贪心题目了&#xff0c;加油! 坏了的计算器 题目分析…

改造 cl_demo_output=>display支持第一行字段名显示成字段描述

1.背景: 标准的cl_demo_output=>display显示的内表第一行为字段名,不方便用户查看,故需要将第一行换成字段描述 2.方法: 2.1 建立FIELDCAT字段结构 定义包含字段名和字段描述的结构和行类型 2.2 建立类,编写相关代码 代码如下: DATA type TYPE c LENGTH 1. DAT…

怎么创建百科人物的词条?百度百科词条创建

百度百科中&#xff0c;创建一个属于自己的词条&#xff0c;不仅是个人荣誉的象征&#xff0c;更是对其生平事迹的官方记录&#xff0c;能够让更多人了解和记住一个人的成就。那么&#xff0c;如何创建一个高质量的百科人物词条呢&#xff1f;本文伯乐网络传媒将详细解答这一问…

007_how_to_start_learning_Matlab学习的启动与加速

Matlab学习的启动与加速 1. 前言 这个专题的Matlab博文系列&#xff0c;来到了传奇的007&#xff0c;我又准备放下技术工作的写作&#xff0c;来一点务虚和规划的内容。 这个系列的开始&#xff0c;也是一个随机发生的小概率事件&#xff0c;本来Python&#xff08;PyQt&…